일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 오블완
- MAPF
- 청첩장 모임
- 구조 패턴
- 도커 주의사항
- Go-lang
- Monthly Checklist
- docker
- 신혼 여행
- 실용주의 프로그래머
- DevOps
- Playwright
- 생성 패턴
- leetcode
- 디자인 패턴
- 논문 정리
- 14일 공부
- terraform
- AWS
- 경로 계획 알고리즘
- 지표
- AWS 비용 절감
- 티스토리챌린지
- PostgreSQL
- github
- amazon ecs
- ssh
- study
- Til
- Rust
- Today
- Total
밤 늦게까지 여는 카페
PostgreSQL autoincrement - Oracle DB는 SERIAL이 없어요? 본문
안녕하세요!
오늘은 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 데이터 타입을 지원해주지 않는 것에 적잖은 충격을 받았었습니다.
내부적으로는 유사하게 동작하겠지만 이 정도의 편의성은 제공할 수 있지 않나...? 싶었습니다.
(개발자 입장에서 편의성 제공이 쉽지만은 않다는 것 공감합니다만!!!)
'데이터베이스 > PostgresQL' 카테고리의 다른 글
PostgreSQL 계정 생성하기 (0) | 2022.11.13 |
---|---|
PostgreSQL constraint - DB가 할 수 있는건 DB한테 맡기자! (0) | 2022.10.21 |
PostgreSQL 에러 "too many connections ~" 대응 방법 (0) | 2022.10.14 |
PostgreSQL EXPLAIN을 이용한 쿼리 성능 분석 - 언제까지 쿼리 하나하나 시간 측정하면서 튜닝할 거에요! (0) | 2022.10.09 |
PostgreSQL 계정 비밀번호 바꾸기 (0) | 2022.10.09 |