Character Strings
- CHAR(n) = CHARACTER(n)
- 크기를 지정하지 않을 시 1로 지정됨
- VARCHAR(n) = CHAR VARYING(n) = CHARACTER VARYING(n)
- 문자열 입력 시에는 Single Quote 사용('') Double Quote 불가
- CHAR로 선언 후에 공간을 모두 사용하지 않으면 공백을 추가
- a char(7) = 'hello' → 'hello '
- VARCHAR는 사용하지 않은 공간은 무시함
- b varchar(7) = 'world' → 'world'
Bit Strings
- BIT(n), BIT VARYING(n)
- 리터럴(아래는 PostgreSQL 한정)
- 2진수 - B'0101'
- 16진수 - X'FF0'
Boolean
- BOOLEAN: { TRUE, FALSE, UNKNOWN }
Dates and Times
- DATE
- TIME [with time zone]
- TIMESTAMP [with time zone]
- 리터럴
- DATE '2009-03-11'
- TIME '13:29:30'
- TIMESTAMP '2009-03-11 13:30:45'
Integer Numbers
- TINYINT: 1 Byte
- SMALLINT: 2 Bytes
- INT, INTEGER: 4 Bbytes
- BIGINT: 8 Bytes
Floating-Point Numbers
- REAL: 4 Bytes
- DOUBLE PRECISION: 8 Bytes
- FLOAT(n): 부동 소수점 크기를 지정할 수 있음
NUMERIC, DEC
- 매우 큰 숫자를 저장할 수 있는 타입
- 화폐를 저장하거나 수량에 대한 정확성이 요구될 때 추천된다
- Integer인지 float-point 타입인지 비교하기 때문에 느리다.
- NUMERIC(p, s)
- p엔 저장하는 전체 크기를 입력
- 정수 부분이 잘리면 에러
- s엔 소수점 부분의 크기를 입력
- 소수점 부분이 잘리면 잘린 부분에서 반올림함
- Ex: NUMERIC(2,1) → -9.9 ~ 9.9 까지 저장 가능
- s를 생략할 경우 정수만 저장함
- 크기를 정확히 알 수 없을 땐 둘 다 생략 가능(각 DB 메뉴얼 확인)
- p엔 저장하는 전체 크기를 입력
PostgreSQL Data Types
- SERIAL
- 실제 타입은 아니고 단지 유일한 식별자 컬럼을 만들기 위한 편의를 위해 만들어짐
- int 타입에 식별자로서 기본적으로 생성되는 컬럼에 SERIAL로 지정함
- Ex
- id SERIAL, = id int GENERATED BY DEFAULT AS IDENTITY,
- TEXT
- 단순 문자열(max 1GB)
- BYTEA
- 이진 문자열 데이터(max 1GB)
- 이미지 같은 멀티미디어 데이터
- CLOB
- 매우 큰 문자열 처리 시 사용
- PostgreSQL에선 지원하지 않음
- BLOB
- 매우 큰 이진 문자열 데이터 처리 시 사용
- CLOB와 BLOB은 표준화가 잘 되어있지 않음
Table Declarations
- PRIMARY KEY는 null이 지원되지 않음
- 값 중복 x
- 반드시 값을 입력해야 함
- 테이블 데이터의 고유 인식번호(id)
- UNIQUE는 null도 값으로 받을 수 있는 유일한 원소를 가지는 컬럼
- 값 중복 x
- 값을 입력하지 않아도 됨(null 허용)
- 중복되면 안 되는 데이터(주민번호, 군번 등)
Sequence, Identity
MySQL의 AUTO_INCREAMENT와 같은 기능
Sequence
SEQUENCE 구문을 따로 만들어 둔 뒤 nextval('시퀀스 이름')을 사용
SEQUENCE는 동시에 여러 입력이 들어와도 항상 다른 값을 할당해줌
SERIAL을 사용하면 위와 같은 시퀀스 구문을 INT 형으로 간편하게 사용할 수 있음
주의할 점은 값을 직접 입력하는 경우 다음과 같이 SEQUENCE 오류가 발생할 수 있음
아래는 4를 직접 입력했지만 SEQUENCE의 다음 값은 4가 되어야 하기 때문에 중복 키 오류가 발생한 것
Identity
아래와 같이 int GENERATED BY DEFAULT AS IDENTITY라는 구문을 사용하면 sequence와 같은 기능을 함.
by default 는 always로도 사용할 수 있는데 always로 사용 시 사용자의 입력값조차도 무시함
by default는 사용자가 임의로 지정한 값을 받을 수 있음
아래와 같이 nextval이나 default로도 사용할 수 있음
현재는 둘 다 표준으로 발전되어 두 가지 다 사용할 수 있음
타입을 SERIAL로 지정하면 두 번째 문단과 같은 기능을 매크로처럼 실행해줌
ALTER SEQUENCE message_id_seq OWNED BY message.id; 구문은
message 테이블이 삭제되면 message_id_seq 시퀀스도 함께 삭제되는 기능이다.
Uploaded by Notion2Tistory v1.1.0