
โ Data Types
CREATE TYPE gender_type AS ENUM ('male', 'female');
CREATE TABLE users (
-- 0 < char(n) varchar(n) < 10,485,760
username CHAR(10) NOT NULL UNIQUE,
email VARCHAR(50) NOT NULL UNIQUE,
gender gender_type NOT NULL,
interests TEXT[] NOT NULL,
-- 1 GB
-- > 2KB TOAST (the oversized-attribute storage technique)
bio TEXT,
profile_photo BYTEA,
-- SMALLINT
-- Signed: -32,768 to 32,767
-- INTGER
-- Signed: -2,147,483,648 to 2,147,483,647
-- BIGINT
-- Signed: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
-- SMALLSERIAL (1 to 32,767)
-- SERIAL (1 to 2,147,483,647)
-- BIGSERIAL (1 to 9,223,372,036,854,775,807)
-- DECIMAL & NUMERIC(precision, scale) 10.53 4p 2s
-- REAL (6 deciaml digits) & DOUBLE PRECISION (15 decimal digits)
age SMALLINT NOT NULL CHECK (age >= 0),
is_admin BOOLEAN NOT NULL DEFAULT FALSE,
-- 4713 BC to 294276 AD
joined_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL,
birth_date DATE NOT NULL,
bed_time TIME NOT NULL,
graduation_year INTEGER NOT NULL CHECK (graduation_year BETWEEN 1901 AND 2115),
internship_period INTERVAL
);
1. ENUM
MySQL์์๋ ENUM์ ๋ฐ๋ก ์ฌ์ฉํ์ฌ ํ์ ์ ์ง์ ํ ์ ์์์ง๋ง PostgreSQL์์๋ ๋จผ์ ํ์ ์ ์ ์ธํ๋ฉด์ ENUM์ ์ฌ์ฉํด์ผ ํ๋ค.
2. SET
SET์ ๋ชจ๋ฐฉํ์ฌ TEXT[]๋ก TEXT๋ก ๊ตฌ์ฑ๋ ๋ฆฌ์คํธ๋ผ๊ณ ๋ช ์ํ ์ ์๋ค.
3. TEXT
PostgreSQL์์๋ TINYTEXT, MEDIUMTEXT, LONGTEXT ๊ฐ์ ๊ฑฐ ์์ด TEXT๋ง ์๋ค.
(์ต๋ ๊ธธ์ด 1GB)
(MySQL์ ์ต๋ 4GB)
4. BYTEA
Byte Array๋ผ๋ ๋ป, ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์ด๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ต๋ ๊ธธ์ด 1GB
(๋ง์ฝ์ postgreSQL์ ๋ ํฐ ํ์ผ์ ์ ์ฅํ๊ณ ์ถ์ผ๋ฉด Large Object API๊ฐ ํ์ํ๋ค. ํ์ง๋ง ์ญ์ ํ์ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๊ฑด ๊ถ์ฅํ์ง ์๋๋ค.)
5. TINYINT
PostgreSQL์ TINYINT๊ฐ ์๋ค.
SMALLINT, INTEGER, BIGINT๊ฐ ์๋ค.
6. UNSIGNED
PostgreSQL์ UNSIGNED Number๊ฐ ์๋ค.
๊ทธ๋์ ์์ ์กฐ๊ฑด์ ์ถ๊ฐํ๋ ค๋ฉด CHECK๋ฅผ ์ฌ์ฉํ๋ค.
7. SERIAL
PostgreSQL์ SMALLSERIAL, SERIAL, BIGSERIAL์ด ์๋ค.
1๋ถํฐ ์์ํ๋ค. (AUTO_INCREMENT๊ฐ ๋๋ค)
8. TIMESTAMP WITH TIME ZONE(TIMESTAMPTZ)
TIMESTAMP์ ๊ฐ์ ๊ฑธ ์ ์ฅํ์ง๋ง, ์๋ฒ๊ฐ ์์นํ TIMEZONE๋ ํจ๊ป ์ ์ฅ๋๋ค.
๋๋ฌด ๊ธฐ๋๊น ์งง๊ฒ TIMESTAMPTZ์ผ๋ก ์ ์ ์๋ ์๋ค.
9. ON UPDATE
PostgreSQL์ MySQL๊ณผ ๋ค๋ฅด๊ฒ ON UPDATE ๊ตฌ๋ฌธ์ด ์๋ค.
์๋์ผ๋ก Trigger๋ฅผ ๋ง๋ค์ด์ ์ง์ ์ ๋ฐ์ดํธ ํด์ค์ผ ํ๋ค.
TYPE์ ๋ํด
postgresql์๋ text๋ varchar๊ฐ์ ๊ธฐ๋ณธ ํ์
๊ณผ, ๊ฐ์์์ ์ ์ํ gender_type์ฒ๋ผ ์ฌ์ฉ์ ์ ์ ํ์
์ด ์์ต๋๋ค.
์ด๋ค์ ์๋์ฒ๋ผ ์กฐํ๊ฐ๋ฅํฉ๋๋ค.
selet * from pg_type;
ํํธ, ํน์ ํ์
์ ์ํ ๋ฐ์ดํฐ๋ง์ ๋ณด๊ณ ์ถ์ ๋๊ฐ ์๋๋ฐ, ์์ปจ๋, ์ฌ์ฉ์๊ฐ ์์ฑํ enum ๊ฐ์ฒด๋
pg_enum์ ์์ต๋๋ค.
์์ฑํ enum์ ์์ธํ ๋ณด๋ ค๋ฉด ๋ค์ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
SELECT * FROM pg_type as pt JOIN pg_enum as pe ON pt.oid =pe.enumtypid ;
https://www.postgresql.org/docs/16/datatype-geometric.html
8.8. Geometric Types
8.8. Geometric Types # 8.8.1. Points 8.8.2. Lines 8.8.3. Line Segments 8.8.4. Boxes 8.8.5. Paths 8.8.6. Polygons 8.8.7. Circles Geometric data …
www.postgresql.org
โ Type Casting
SELECT
joined_at::DATE
FROM
users;
TIMESTAMPTZ ํ์ ์ธ joined_at์์ DATE ๋ถ๋ถ๋ง ์ถ์ถํด์ ๊ฐ์ ธ์ด
https://www.postgresql.org/docs/8.1/functions-datetime.html
Date/Time Functions and Operators
www.postgresql.org
โ GENERATED ALWAYS AS IDENTITY
CREATE TABLE genres (
genre_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY
);
BIGSERIAL์ ์ฌ์ฉํ๋ฉด AUTO_INCREMENT ์๋ ์ ์ฉ์ด ๋๋ฉด์ PRIMARY KEY๋ก ์ฌ์ฉํ ์ ์์ง๋ง,
BIGINT์ AS IDENTITY๋ฅผ ์ฌ์ฉํ์ฌ AUTO_INCREMENT๋ฅผ ์ ์ฉ์ํค๊ณ GENERATED ALWAYS๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ฃ์ ์ ์๊ฒ ํ๋ ๊ฒ์ด SQL ํ์ค์ด๋ค.(genre_id๋ ์์ ๋ ๋ถ๊ฐ๋ฅํด์ง)
'๐งฉ SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| SQL - PostgreSQL, Function, Procedure (0) | 2026.04.01 |
|---|---|
| SQL - PostgreSQL, UNNEST, DISTINCT, FULL OUTER JOIN (0) | 2026.04.01 |
| SQL - PostgreSQL, pgAdmin (0) | 2026.04.01 |
| SQL - PostgreSQL ์ค์น(๊ณต์ ์ฌ์ดํธ, Homebrew) (0) | 2026.04.01 |
| SQL - MySQL, Full Text Index (0) | 2026.03.31 |