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
반응형
'언어 > SQL' 카테고리의 다른 글
[PostgreSQL] VARCHAR 칼럼 내 일부 단어만 변경 (0) | 2024.02.05 |
---|---|
View와 Materialized View (0) | 2023.07.24 |
Batch Insert/Delete (0) | 2023.07.22 |
[PostgreSQL] 시간 쿼리 (0) | 2023.05.29 |
[PostgreSQL] 특정 칼럼 기준 가장 오래된 데이터 보여주기 (0) | 2021.10.25 |