본문 바로가기
Database/PostgreSQL

[PostgreSQL] 테이블 생성하기

by Devyne 2025. 5. 7.
반응형

 

기존 MySQL/Maria DB를 사용하다 PostgreSQL를 쓸 일이 있어

기본 문법부터 알아볼려고 한다. 거의 비슷한 것 같은데 약간약간 다른 것 같아서 이렇게 작성한다.


테이블 생성

우선 테이블 생성에 앞서 테이블 생성 시 컬럼의 제약 조건에 대해 간단히 알아보자.

PRIMARY KEY PRIMARY KEY로 설정된 컬럼은 테이블 내의 데이터가 유일해야 하고 반드시 NOT NULL이어야 한다.

NOT NULL NOT NULL로 설정된 컬럼은 NULL이 저장될 수 없다.
UNIQUE UNIQUE로 설정된 컬럼은 테이블 내에서 유일해야 한다. (중복X)
CHECK 지정하는 조건에 맞는 값이 들어가야 한다.
REFERENCES 참조하는 테이블의 특정 컬럼에 값이 존재해야 한다.

제약 조건 같은 경우, MySQL이랑 똑같다. (다행히)

 

이제 테이블을 만들어 볼려고 한다.

board 테이블

  • board_idx - SERIAL - primarykey - 인덱스값
  • title - varhcar(50) - 제목
  • type - SMALLINT - 카테고리
  • author - varchar(20) - 글쓴이
  • contents - TEXT - 글 내용
  • reg_date - datetime - current_timestamp() - 등록일자
  • mod_date - datetime - 수정일자
  • use_yn - char(1) - default 0 - 삭제 유무 ( 0:기본, 1:삭제)
CREATE TABLE board (
	board_idx SERIAL PRIMARY KEY, 
	title VARCHAR(50),
	type SMALLINT,
	author VARCHAR(20),
	contents TEXT,
	reg_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
	mod_date TIMESTAMP WITHOUT TIME ZONE, 
	use_yn CHAR(1) DEFAULT '0' 
);

 

SERIAL 타입은 MySQL에서 auto_increment와 유사하다.

다른 방법으론 시퀀스를 생성한 뒤 default로 nextval(’시퀀스’) 로 설정하면 1,2,3, … 이렇게 증가한다.

type 같은 경우, MySQL 처럼 TINYINT 타입이 없어 SMALLINT 로 설정했다.

reg_date, mod_date 는 datetime 대신해 TIMESTAMP WITHOUT TIME ZONE 으로 설정했다.

타임존 정보는 저장하지 않고 날짜, 시간 정보만 저장하기 위해서 이렇게 설정.


이제 각 컬럼에 대해서 코멘트를 추가해보자.

PostgreSQL에선 MySQL와 달리 CREATE TABLE 문 내부에서 코멘트를 포함시키는 구문이 없어

테이블 생성 후 별도로 추가해야 한다.

COMMENT ON TABLE board IS '게시판 테이블';

COMMENT ON COLUMN board.board_idx IS '인덱스값';
COMMENT ON COLUMN board.title IS '제목';
COMMENT ON COLUMN board.type IS '카테고리';
COMMENT ON COLUMN board.author IS '글쓴이';
COMMENT ON COLUMN board.contents IS '글 내용';
COMMENT ON COLUMN board.reg_date IS '등록일자';
COMMENT ON COLUMN board.mod_date IS '수정일자';
COMMENT ON COLUMN board.use_yn IS '삭제 유무 (0:기본, 1:삭제)';
반응형

'Database > PostgreSQL' 카테고리의 다른 글

[PostgreSQL] TimeStamp, Date 날짜 형식 변환  (0) 2025.05.08