ALTER DATABASE — 데이터베이스 정의 변경하기

ALTER DATABASE — 데이터베이스 정의 변경하기

ALTER DATABASE는 데이터베이스의 속성을 바꾸는 명령이에요. 이름이나 소유자, 기본 테이블스페이스를 바꾸거나, 데이터베이스에 설정된 실행 구성 변수의 세션 기본값을 조정할 때 씁니다. 특정 데이터베이스에만 적용할 설정을 걸어두고 싶을 때 특히 유용해요.

출처: PostgreSQL 문서

본문

시놉시스 (Synopsis)

ALTER DATABASE name [ [ WITH ] option [ ... ] ]

where option can be:

    ALLOW_CONNECTIONS allowconn
    CONNECTION LIMIT connlimit
    IS_TEMPLATE istemplate

ALTER DATABASE name RENAME TO new_name

ALTER DATABASE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }

ALTER DATABASE name SET TABLESPACE new_tablespace

ALTER DATABASE name REFRESH COLLATION VERSION

ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER DATABASE name SET configuration_parameter FROM CURRENT
ALTER DATABASE name RESET configuration_parameter
ALTER DATABASE name RESET ALL

설명 (Description)

ALTER DATABASE는 데이터베이스의 속성을 변경해요.

첫 번째 형식은 특정 데이터베이스별 설정을 바꿔요. (자세한 내용은 아래를 보세요.) 이 설정은 데이터베이스 소유자나 슈퍼유저만 바꿀 수 있어요.

두 번째 형식은 데이터베이스의 이름을 바꿔요. 데이터베이스 이름을 바꾸려면 데이터베이스 소유자나 슈퍼유저여야 하며, 슈퍼유저가 아닌 소유자는 CREATEDB 권한도 있어야 해요. 현재 연결 중인 데이터베이스는 이름을 바꿀 수 없어요. (그렇게 하려면 다른 데이터베이스에 연결해야 해요.)

세 번째 형식은 데이터베이스의 소유자를 바꿔요. 소유자를 바꾸려면 새 소유 역할로 SET ROLE할 수 있어야 하고 CREATEDB 권한도 있어야 해요. (슈퍼유저는 이 모든 권한을 자동으로 가져요.)

네 번째 형식은 데이터베이스의 기본 테이블스페이스를 바꿔요. 데이터베이스 소유자나 슈퍼유저만 할 수 있으며 새 테이블스페이스에 대한 create 권한도 필요해요. 이 명령은 데이터베이스의 이전 기본 테이블스페이스에 있던 테이블이나 인덱스를 물리적으로 새 테이블스페이스로 옮겨요. 이 데이터베이스에 대한 새 기본 테이블스페이스는 비어 있어야 하고, 아무도 그 데이터베이스에 연결 중이면 안 돼요. 기본이 아닌 테이블스페이스의 테이블과 인덱스는 영향을 받지 않아요. 파일을 새 테이블스페이스로 복사하는 방법은 file_copy_method 설정의 영향을 받아요.

나머지 형식은 PostgreSQL 데이터베이스의 실행 구성 변수에 대한 세션 기본값을 바꿔요. 이후 그 데이터베이스에서 새 세션이 시작될 때마다 지정된 값이 세션 기본값이 돼요. 데이터베이스별 기본값은 postgresql.conf에 있는 설정이나 postgres 명령줄에서 받은 설정을 덮어써요. 데이터베이스의 세션 기본값은 데이터베이스 소유자나 슈퍼유저만 바꿀 수 있어요. 일부 변수는 이렇게 설정할 수 없거나 슈퍼유저만 설정할 수 있어요.

매개변수 (Parameters)

  • name — 속성을 바꿀 데이터베이스의 이름이에요.
  • allowconn — false면 아무도 이 데이터베이스에 연결할 수 없어요.
  • connlimit — 이 데이터베이스에 얼마나 많은 동시 연결을 허용할지예요. -1은 제한 없음을 뜻해요.
  • istemplate — true면 CREATEDB 권한이 있는 사용자라면 누구든 이 데이터베이스를 클론할 수 있어요. false면 슈퍼유저나 데이터베이스 소유자만 클론할 수 있어요.
  • new_name — 데이터베이스의 새 이름이에요.
  • new_owner — 데이터베이스의 새 소유자예요.
  • new_tablespace — 데이터베이스의 새 기본 테이블스페이스예요. 이 형식의 명령은 트랜잭션 블록 안에서는 실행할 수 없어요.
  • REFRESH COLLATION VERSION — 데이터베이스의 콜레이션 버전을 갱신해요. 배경은 참고(Notes)를 보세요.
  • configuration_parameter, value — 이 데이터베이스의 지정된 구성 매개변수에 대한 세션 기본값을 주어진 값으로 설정해요. valueDEFAULT이거나 동등하게 RESET을 쓰면 데이터베이스별 설정이 제거되어, 새 세션에서는 시스템 전역 기본 설정을 상속받게 돼요. RESET ALL을 쓰면 데이터베이스별 설정을 모두 지워요. SET FROM CURRENT는 세션의 현재 매개변수 값을 데이터베이스별 값으로 저장해요. 허용되는 매개변수 이름과 값에 대한 자세한 내용은 SET과 19장을 보세요.

참고 (Notes)

세션 기본값을 데이터베이스 대신 특정 역할에 묶을 수도 있어요. ALTER ROLE을 보세요. 역할별 설정은 충돌이 있으면 데이터베이스별 설정을 덮어써요.

예제 (Examples)

데이터베이스 test에서 기본적으로 인덱스 스캔을 비활성화하려면:

ALTER DATABASE test SET enable_indexscan TO off;

호환성 (Compatibility)

ALTER DATABASE 문은 PostgreSQL 확장이에요.

더 알아보기 (Learn more)

  • CREATE DATABASE — 새 데이터베이스를 만드는 명령이에요.
  • DROP DATABASE — 데이터베이스를 삭제하는 명령이에요.
  • ALTER ROLE — 역할별 설정을 묶을 수 있어요.