PostgreSQL에서 auto_increment는?
- Development/Database
- 2021. 4. 15.
MySQL에서 자동으로 증가하는 ID를 PK로 사용하기 위해 auto_increment를 사용한다. 그러면, PostgreSQL에서는 이와 동일한 기능을 어떻게 사용할까?
MySQL에서의 auto_increment를 PostgreSQL에서는 어떻게 쓸까?
몇 가지 방식으로 해당 요구사항을 만족시킬 수 있다. MySQL에서 어떤 id를 자동 증가하게 하고, 그 값을 PK로 지정하기 위해 다음과 같은 방식으로 표현한다.
CREATE TABLE IF NOT EXISTS `students` (
id int(6) AUTO_INCREMENT,
...
PRIMARY KEY (id)
);
이와 동일하게 하려면, PostgreSQL에서는 다음과 같은 방법이 사용가능하다.
Sequence 사용
오라클에서 Sequence와 거의 같다.
# 시퀀스 생성하기
create sequence seq;
# 다음 시퀀스값 생성하기
select nextval('seq');
# 현재 시퀀스값 확인하기
select currval('seq');
# 가장 최근 시퀀스값 확인하기
select lastval();
sequence를 사용하여 테이블을 다음과 같이 생성할 수 있다.
CREATE TABLE students (
id integer NOT NULL DEFAULT nextval('seq'),
...
PRIMARY KEY(id)
);
SERIAL 타입 사용
SERIAL이라는 타입을 지정해 주는 방법도 있다. SERIAL에는 세 종류의 타입과 그 타입에 따른 키의 범위가 달라진다.
- SMALLSERIAL
- 객체크기: 2 bytes
- 키 범위: 1~32,767
- SERIAL
- 객체크기: 4 bytes
- 키 범위: 1~2,147,483,647
- BIGSERIAL
- 객체크기: 8 bytes
- 키 범위: 1~9,223,372,036,854,775,807
id 컬럼을 auto_increment로 선언하는 것과 PK로 지정하는 것은 별개이다. PostgreSQL에서도 마찬가지라 생각하면 된다.
CREATE TABLE students (
id SERIAL PRIMARY KEY,
...
);
혹은
CREATE TABLE students (
id SERIAL,
...
PRIMARY KEY (id)
);
등과 같이 지정하면 된다.
아래의 쿼리를 사용하여 특정 테이블의 Serial 값을 확인할 수 있다.
SELECT currval(pg_get_serial_sequence('테이블명', 'Serial컬럼명'));
GENERATED ALWAYS AS IDENTITY
CREATE TABLE students3 (
id integer GENERATED ALWAYS AS IDENTITY,
...
PRIMARY KEY (id)
);
와 같이 사용해도 된다.
'Development > Database' 카테고리의 다른 글
MySQL 타입비교 - datetime vs. timestamp (0) | 2021.05.24 |
---|---|
MySQL Time Zone 변경 방법 (0) | 2021.05.17 |
OLTP, OLAP 비교 (0) | 2021.04.26 |
PostgreSQL - 트랜잭션 격리 수준(transaction isolation level) 테스트 (0) | 2021.04.17 |
PostgreSQL 트랜잭션 격리수준 확인/변경 (0) | 2021.04.10 |
MySQL - 트랜잭션 격리 수준 (transaction isolation level) 테스트 (0) | 2021.04.04 |
MySQL 트랜잭션 격리수준 확인/변경 (0) | 2021.03.27 |
psql (postgresql client) command (0) | 2021.03.17 |