일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 파이썬
- 소수
- ceil
- Dictionary
- SUM()
- floor
- BOJ
- timestamp
- Codeforces
- 리스트 컴프리헨션
- enumerate
- 네이밍
- mysql
- lower_case_table_names
- 에라토스테네스의 체
- 세그먼트 트리
- flask
- list comprehension
- FOREIGN KEY
- 자료구조
- SUM
- convention
- itertools
- datetime
- project euler
- 외래키
- 큰 수 나누기
- 딕셔너리
- 2557
- python
Archives
- Today
- Total
늒네 기록
[postgresql] mysql의 auto increment 기능과 유사한 serial 본문
postgresql을 처음 써보면서 신기했던 건, mysql에서 봤던 auto increment 조건을 바로 붙여주는 옵션이 없는 대신 serial이라는 타입이 존재했던 것.
https://www.postgresql.org/docs/current/datatype-numeric.html
위 페이지에 보면 numeric type으로 smallserial, serial, bigserial이 존재하는데, 'auto incrementing integer'라는 설명이 붙어있다. 그리고 ctrl+f로 serial을 찾아서 아래 있는 설명을 읽어보면 흥미로운 사실을 알 수 있는데,
1
2
3
|
CREATE TABLE tablename (
colname SERIAL
);
|
cs |
이 SQL문이,
1
2
3
4
5
|
CREATE SEQUENCE tablename_colname_seq AS integer;
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
|
cs |
이 SQL문과 같은 역할을 한다는 것이다. 여기서 눈여겨보아야 할 것은 SEQUENCE를 만들었다는 것인데, 이 말은 특정 유저에 테이블에 접근할 권한을 주었다고 해도 시퀀스에 접근할 권한을 주지 않으면 아래와 같은 오류가 발생할 수 있다는 것이다.
1
|
오류: test_table_id_seq 시퀀스 접근 권한 없음
|
cs |
테스트를 위해 만들었던 테이블 이름이 test_table이었고, serial 타입으로 만든 칼럼이 id라서 위의 예시 SQL문에서와 같이 test_table_id_seq라는 시퀀스가 생성되었으나, 시퀀스에 별도로 접근 권한을 설정해주지 않은 상태였어서 접근 권한 오류가 뜨고 테이블에 insert가 불가능했었다.
시퀀스 접근 권한 없음 오류가 갑자기 나와서 당황했었는데, 시퀀스에 들어가서 접근 권한을 새로 주었더니 문제가 해결되었다.
반응형
'DB 공부 기록 > postgresql' 카테고리의 다른 글
[postgresql] json 필드에 작은 따옴표가 있을때 insert하기 (0) | 2020.11.21 |
---|---|
[postgresql] 칼럼 순서 바꾸기 (0) | 2020.10.03 |
Comments