관리 메뉴

밤 늦게까지 여는 카페

PostgreSQL autoincrement - Oracle DB는 SERIAL이 없어요? 본문

데이터베이스/PostgresQL

PostgreSQL autoincrement - Oracle DB는 SERIAL이 없어요?

Jㅐ둥이 2022. 10. 15. 09:23

안녕하세요!

오늘은 Oracle 데이터베이스를 공부하다가 데이터 타입에서 SERIAL을 찾지 못하여 글을 남기게 되었습니다.

 

SERIAL 데이터 타입

PostgreSQL에서 지원하는(MySQL도 지원하더라구요) SERIAL 데이터 타입은 정확한 의미로 타입은 아닙니다.

SEQUENCE를 자동으로 설정해주는 일종의 wrapper 데이터 타입입니다.

 

PostgreSQL에서는 smallserial(2 byte), serial(4 byte), bigserial(8 byte)를 제공하고 있습니다.

 

SEQUENCE란?

SEQUENCE는 데이터베이스에서 관리해주는 스트림으로 고유한 NUMERIC 필드를 위해서 사용됩니다.

데이터베이스에서 자체적으로 원자성을 지켜주기 때문에 중복된 값이 들어갈 염려가 없다는 장점이 있습니다.

 

※하지만 사용자가 SEQUENCE의 값을 조정할 수도 있기 때문에 데이터베이스 마이그레이션 과정 중 문제가 발생할 수 있으니 주의하셔야 합니다※

 

SERIAL 데이터 타입의 동작 방식

Oracle에서는 SEQUENCE를 다음과 같이 사용합니다.

CREATE TABLE test (
	id NUMBER(10),
    content VARCHAR(100)
);

CREATE SEQUENCE test_id_seq AS integer;

INSERT INTO test(id, content) VALUES(test_id_seq.NEXT_VAL, 'test content);

INSERT 문에서 생성한 시퀀스에서 전달해주는 고유한 값을 사용합니다.

 

 

PostgreSQL에서는 SERIAL을 이용해서 위의 내용이 생략됩니다.

CREATE TABLE test (
	id SERIAL,
    content VARCHAR(100)
);

INSERT INTO test(content) VALUES('test content);

 

여러분은 어느 쪽이 더 직관적이었나요?

저는 처음부터 MySQL과 PostgreSQL을 사용했어서 ORACLE DB가 SERIAL 데이터 타입을 지원해주지 않는 것에 적잖은 충격을 받았었습니다.

 

내부적으로는 유사하게 동작하겠지만 이 정도의 편의성은 제공할 수 있지 않나...? 싶었습니다.

(개발자 입장에서 편의성 제공이 쉽지만은 않다는 것 공감합니다만!!!)

반응형