본문 바로가기
언어/SQL

[PostgreSQL] 캐릭터형 AUTOINCREMENT

by 이민우 2021. 10. 25.
728x90
반응형

AutoIncrement를 사용하면 1, 2, 3, 4 와 같은 시퀀스 ID가 자동으로 만들어지게된다.

 

하지만 때로는 위와 같은 방식이 아니라, 숫자형의 자리수를 정해서 0001, 0002 와 같은 ID를 만들어야 할 때가 있다.

 

PostgreSql에서는 다음의 방법으로 위의 ID를 만들 수 있다.

 

쿼리는 다음과 같다.

CREATE SEQUENCE IF NOT EXISTS <SEQUENCE_NAME> 
	START WITH 1 
	INCREMENT BY 1 
	NO MINVALUE || MINVALUE 1
	NO MAXVALUE || MAXVALUE 99999
	CACHE 1;

CREATE TABLE IF NOT EXISTS <TABLE_NAME> (
	column1	VARCHAR(N)	DEFAULT to_char(nextval('SEQUENCE_NAME'), 'FM0000'),
	column2 ...   
);

ALTER SEQUENCE <SEQUENCE_NAME> OWNED By <TABLE_NAME>.column1;

 

간단하게 설명하면 시퀀스를 만들어 연속되는 값을 만들어 넣어주는 방식이다.

 

여기서 FM0000의 방식은 '0000' 안에 해당 값을 집어넣어주는 방식이다.

만약 FM을 붙이지 않으면 00001, 00002 와 같이 뒤에 붙어서 나오게 되고, FM을 붙이면 0001, 0002 와 같은 양식으로 출력된다. 그리고 to_char은 생성된 숫자를 캐릭터형으로 변환시켜준다.

 

마지막으로 ALTER SEQUENCE는 해당 칼럼에 귀속시킴으로써 테이블 삭제 시 시퀀스도 같이 삭제되게 만든 것이다.

 

테스트를 해보기 위해 테이블을 만들자.

CREATE SEQUENCE IF NOT EXISTS test_sequence
	START WITH 1 
	INCREMENT BY 1 
	NO MINVALUE
	MAXVALUE 9999
	CACHE 1;
	
CREATE TABLE IF NOT EXISTS test_table (
	id	VARCHAR(4)	DEFAULT TO_CHAR(NEXTVAL('test_sequence'), 'FM0000'),
	col VARCHAR(10),
	
	PRIMARY KEY (id)
);

ALTER SEQUENCE test_sequence OWNED BY test_table.id;

 

그리고 id 없이 col에만 값을 넣어 어떻게 저장되는지 확인.

INSERT INTO test_table (col) VALUES ('1');
INSERT INTO test_table (col) VALUES ('2');
INSERT INTO test_table (col) VALUES ('3');
INSERT INTO test_table (col) VALUES ('4');
INSERT INTO test_table (col) VALUES ('5');
INSERT INTO test_table (col) VALUES ('6');
INSERT INTO test_table (col) VALUES ('7');
INSERT INTO test_table (col) VALUES ('8');
INSERT INTO test_table (col) VALUES ('9');

728x90
반응형