[PostgreSQL] 시퀀스 자동 증가 설정과 오류 해결 방법 정리

2025. 5. 18. 19:33·개발 (Development)/PostgreSQL

PostgreSQL에서 기본 키에 자동 증가 기능을 설정할 때는 시퀀스(Sequence) 를 활용합니다. 그러나 실무에서는 테이블을 사전에 정의한 뒤, 시퀀스를 나중에 따로 연결해야 하거나 SQL 파일로 배포 시 동적 값을 반영해야 할 수도 있습니다.

이번 글에서는 다음과 같은 내용을 단계별로 정리합니다.

  • 특정 컬럼에 시퀀스가 적용되어 있는지 확인하고, 없을 경우 생성 및 연결하는 방법
  • 시퀀스 생성 시 발생할 수 있는 sequence must have same owner as table 오류 해결
  • SQL 파일에 시작값을 반영하기 위한 자동화 방식

1. 시퀀스 존재 확인 및 자동 증가 설정

예를 들어 example_table이라는 테이블의 id 컬럼에 시퀀스가 연결되어 있지 않다면, 수동으로 생성하고 연동해줘야 합니다.

먼저 현재 최대 ID 값을 조회합니다.

SELECT MAX(id) FROM example_table;

예를 들어 조회 결과가 9050이라면, 다음과 같이 시퀀스를 생성합니다.

CREATE SEQUENCE example_table_id_seq START WITH 9051;

이후 해당 컬럼이 자동으로 시퀀스를 참조하도록 기본값을 설정합니다.

ALTER TABLE example_table ALTER COLUMN id SET DEFAULT nextval('example_table_id_seq');

마지막으로 시퀀스를 해당 컬럼과 연결하여 의존성을 명확히 지정합니다.

ALTER SEQUENCE example_table_id_seq OWNED BY example_table.id;

이렇게 하면 id 컬럼은 자동으로 시퀀스 값을 받아 증가하게 됩니다.

2. sequence must have same owner as table 오류 해결

시퀀스를 테이블에 연결하거나 기본값을 설정하는 과정에서 다음과 같은 오류가 발생할 수 있습니다.

ERROR:  sequence must have same owner as table

이 오류는 시퀀스와 테이블의 소유자(owner) 가 다르기 때문에 발생합니다. PostgreSQL은 시퀀스를 테이블에 연결할 때 소유자가 일치해야 합니다.

해결 방법은 아래와 같이 ALTER SEQUENCE 명령어로 시퀀스의 소유자를 변경하는 것입니다.

ALTER SEQUENCE example_table_id_seq OWNER TO table_owner;

여기서 table_owner는 해당 테이블의 실제 소유자입니다. \dt+ example_table 명령어를 통해 확인할 수 있습니다.

3. SQL 파일 내 시작값을 자동으로 반영하는 방식

운영 환경에서 SQL 파일을 통해 시퀀스를 생성해야 하는 경우, START WITH 값을 수동으로 매번 입력하는 것은 번거롭고 실수할 가능성이 큽니다. 이를 자동화하기 위해 쉘 스크립트를 활용할 수 있습니다.

쉘 스크립트 예시

#!/bin/bash

# PostgreSQL에서 id 최대값 조회 후 1 증가
MAX_ID=$(psql -U postgres -d your_db -t -c "SELECT COALESCE(MAX(id), 0) + 1 FROM example_table;" | xargs)

# 템플릿 SQL 파일의 시작값을 치환하여 새 SQL 생성
sed "s/__START_VALUE__/$MAX_ID/" sequence_template.sql > create_sequence.sql

템플릿 SQL 예시 (sequence_template.sql)

CREATE SEQUENCE example_table_id_seq START WITH __START_VALUE__;
ALTER TABLE example_table ALTER COLUMN id SET DEFAULT nextval('example_table_id_seq');
ALTER SEQUENCE example_table_id_seq OWNED BY example_table.id;

이렇게 하면 매번 SQL을 수동 수정하지 않고, 현재 테이블의 ID 기준으로 자동 증가 시퀀스를 생성하는 SQL 파일을 생성할 수 있습니다.

마무리하며

PostgreSQL에서 시퀀스는 단순한 자동 증가 기능을 넘어서, 테이블 구조와의 긴밀한 연결이 필요합니다. 특히 기존 테이블에 시퀀스를 나중에 붙이거나, 배포 자동화를 위해 SQL 파일을 구성해야 하는 경우 위와 같은 과정이 매우 유용합니다. 또한, 예상치 못한 owner 관련 오류를 예방하고, 쉘 스크립트를 활용해 효율적인 배포도 가능해집니다.

반응형

'개발 (Development) > PostgreSQL' 카테고리의 다른 글

[PostgreSQL] PostgreSQL에서 threshold 값 이력 관리 및 최신값 조회 테이블 설계하기  (0) 2025.06.28
[PostgreSQL] 두 테이블 비교 시 기준 테이블의 데이터를 모두 유지하는 방법  (0) 2025.05.25
[PostgreSQL] 실전 활용 - 문자열 포함, 쉼표 구분 배열 매칭, JSON 배열 필터링  (0) 2025.04.26
[PostgreSQL] PostgreSQL JSON 쿼리 성능 개선과 Java에서의 활용  (1) 2025.04.06
[PostgreSQL/TimescaleDB] TimescaleDB 사용 중 hypertable 및 chunk 포함 전체 백업과 복원하기  (0) 2025.04.05
'개발 (Development)/PostgreSQL' 카테고리의 다른 글
  • [PostgreSQL] PostgreSQL에서 threshold 값 이력 관리 및 최신값 조회 테이블 설계하기
  • [PostgreSQL] 두 테이블 비교 시 기준 테이블의 데이터를 모두 유지하는 방법
  • [PostgreSQL] 실전 활용 - 문자열 포함, 쉼표 구분 배열 매칭, JSON 배열 필터링
  • [PostgreSQL] PostgreSQL JSON 쿼리 성능 개선과 Java에서의 활용
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (237)
      • 개발 (Development) (170)
        • Algorithm (1)
        • Angular (1)
        • AWS (7)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (36)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (33)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (12)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리눅스 마스터 2급 2차
    AWS
    PostgreSQL
    리눅스 마스터 2급
    Linux
    timescaledb
    springboot
    ADsP
    docker
    java
    DevOps
    백준자바
    Kafka
    Vue.js
    백준
    Linux master
    백준온라인저지
    Kubernetes
    deepseek
    오답노트
    JPA
    JSON
    pandas
    javascript
    자바
    데이터분석
    python
    백준알고리즘
    파이썬
    MyBatis
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[PostgreSQL] 시퀀스 자동 증가 설정과 오류 해결 방법 정리
상단으로

티스토리툴바