본문 바로가기
DBMS/PostgreSQL

[PostgreSQL] 데이터 이관 시 ERROR: permission denied for schema

by 드바 2024. 1. 29.

COPY 명령등을 사용하여 데이터 이관 작업 진행 시
ERROR:  permission denied for schema 에러 발생하는 경우가 있습니다
이런 경우 외래키(foreign key)가 설정되어 있는지 확인이 필요합니다

INSERT 하려는 테이블이 다른 테이블의 데이터를 참조하는 FK(외래키)가 생성되어 있을 때 발생합니다
 : 참조되는 테이블의 owner가 작업을 실행하는 계정과 동일하다면 발생하지 않고 다른 경우 발생

PostgreSQL에서는 트리거를 사용하여 외래키(참조 무결성 제약)가 구현되므로 trigger를 비활성화 해주면 됩니다

 

방법 1

세션 파라미터 변경
session_replication_role 파라미터를 replica로 설정하면 replica 상태의 트리거만 활성화되고 나머지는 비활성화되어 작업진행 가능 합니다

-- 작업 세션의 설정 변경하여 모든 트리거 비활성
SET session_replication_role = 'replica';

-- 원복(세션 레벨이라 접속 종료하면 됨)
SET session_replication_role = 'origin' ;

 

방법 2

테이블별 트리거 활성/비활성
작업 대상 테이블의 트리거
비활성화 -> 작업 -> 활성화
단계로 진행 가능 합니다

-- 테이블 트리거 비활성
ALTER TABLE sk.tab1 DISABLE TRIGGER ALL;

-- 테이블 트리거 활성
ALTER TABLE sk.tab1 ENABLE TRIGGER ALL;

 

댓글