|
PostgreSQL 13 버전부터
psql 내장 명령어로 \restrict, \unrestrict 명령이 포함되었는데,
너무 단순한 기능이라서 공식 문서에 그 설명이 없어 여기 남긴다.
postgres=# \restrict a
postgres=# select current_user;
current_user
--------------
ioseph
(1개 행)
postgres=# \?
백슬래시 명령은 제한되었음; \unrestrict 명령만 허용함
postgres=# \unrestrict a
postgres=# \unrestrict a
\unrestrict: 현재 엄격 모드가 아님
즉 엄격 모드 상태가 되면 \ 백슬래시로 시작하는 psql 내장 명령어를 모두(\unrestrict는 제외)를 사용할 수 없게 된다.
만일 sql 스크립트가
\restrict a
create table t (a int);
\c another_database
create table t (a int);
\unrestrict a
이런식으로 두 데이터베이스를 바꿔가면서 같은 테이블을 만들고 싶어 \c 명령을 사용했다면,
위에서 실행했는 \restrict a 명령에 의해 엄격 모드 상태이기 \c 명령은 실패하고,
같은 데이터베이스 내에서 t 테이블을 한번 더 만들려고 시도하고, 그 테이블이 이미 있어
두번째 create table 명령은 실패하게 된다.
자주 사용하는 role 변경 작업인
\c - new_role
같은 명령도 쓸 수 없게 된다.
이 때는 set role new_role 같은 SQL 명령으로 role 전환을 해야한다.
|