ALTER DATABASE — 데이터베이스 바꾸기
ALTER DATABASE이름
[ [ WITH ]옵션
[ ... ] ]옵션
자리에는: ALLOW_CONNECTIONS접속여부
CONNECTION LIMIT제한접속수
IS_TEMPLATE템플릿여부
ALTER DATABASE이름
RENAME TO새이름
ALTER DATABASE이름
OWNER TO {새소유주
| CURRENT_USER | SESSION_USER } ALTER DATABASE이름
SET TABLESPACE새테이블스페이스
ALTER DATABASE이름
SET환경설정_매개변수
{ TO | = } {값
| DEFAULT } ALTER DATABASE이름
SET환경설정_매개변수
FROM CURRENT ALTER DATABASE이름
RESET환경설정_매개변수
ALTER DATABASE이름
RESET ALL
ALTER DATABASE
명령은 해당 데이터베이스 속성을 바꾼다.
첫번째 구문은 해당 데이터베이스 접속 관련 설정과 템플릿 데이터베이스로 사용할지를 설정하는데 사용된다. (아래에서 좀 더 자세히 다룬다.) 슈퍼유저와 해당 데이터베이스 소유주만 이 명령을 사용할 수 있다.
두번째 구문은 데이터베이스 이름을 바꾸는 구문이다. 슈퍼유저와
해당 데이터베이스 소유주만 사용할 수 있으며, 두 경우가 아닌
일반 사용자인 경우라면, 그 사용자에게 CREATEDB
권한이 있으면 사용할 수 있다.
현재 접속한 데이터베이스의 이름은 바꿀 수 없다. (다른 데이터베이스에
접속해서 이름을 바꿔야 한다.)
세번째 구문은 데이터베이스 소요주를 바꾸는 구문이다.
현재 접속한 사용자는 새 소유주로 지정할 사용자에 직간접적으로
소속되어 있어야 하며, 새 사용자는 CREATEDB
권한이
있어야 한다.
(슈퍼유저는 이런 제약 조건에 상관 없이 작업할 수 있다.)
네번째 구문은 해당 데이터베이스의 기본 테이블스페이스를 바꾸는 구문이다. 데이터베이스 소유주나 슈퍼유저만 이 명령을 사용할 수 있고, 이 사용자는 새 테이블스페이스에 대한 create 권한이 있어야 한다. 이 명령은 물리적으로 옛 테이블스페이스 있던 개체들(테이블, 인덱스 등)을 새 테이블스페이스로 옮긴다. 새 테이블스페이스는 빈 상태여야하며, 이 작업을 할 시점에는 자기 자신 외 아무도 이 데이터베이스에 접속해 있으면 안된다. 이미 특정 테이블스페이스를 사용하도록 지정한 테이블과 인덱스는 이 작업에서 제외된다.
나머지 구문은 PostgreSQL 데이터베이스
서버 환경 설정 매개 변수 값을 기본 세션에 적용되도록 바꾸는
구문이다.
새로운 세션이 이 데이터베이스로 접속하면, 여기서 지정한 설정 값을
그 세션 기본값으로 사용한다.
postgresql.conf
에서 지정했거나,
서버 실행시 지정한 명령행 옵션으로 지정한 설정값을 무시하고,
이 값을 사용한다.
데이터베이스 소유주나 슈퍼유저만 이 명령을 사용할 수 이다.
몇몇 변수는 이 방법으로 지정할 수 없기도 하고,
슈퍼유저만 설정할 수 있기도 한다.
이름
작업 대상 데이터베이스 이름.
접속여부
이 값이 false면 해당 데이터베이스에 아무도 접속할 수 없다.
제한접속수
동시 접속할 수 최대 연결 수. -1은 무제한.
템플릿여부
이 값이 true면, CREATEDB
권한을 가진
모든 사용자는 이 데이터베이스를 복사해서 새로운 데이터베이스를 만들 수
있으며, false면 슈퍼유저와 이 데이터베이스 소유주만 복사본
데이터베이스를 만들 수 있다.
새이름
바뀔 새 데이터베이스 이름.
새소유주
바뀔 데이터베이스 새 소유주 이름.
새테이블스페이스
바뀔 데이터베이스 기본 테이블스페이스 이름.
이 작업은 트랜잭션 안에서는 사용할 수 없다.
환경설정_매개변수
값
이 데이터베이스로 접속하는 세션의 기본 환경 설정 매개 변수 값을
지정한다.
If
값
으로 DEFAULT
또는 RESET
을 지정하면, 작업 다음부터
접속하는 세션은 시스템 전역 설정값을 사용한다.
RESET ALL
구문은 모든 데이터베이스 단위
지정한 설정을 없앤다.
SET FROM CURRENT
구문은 현재 접속해 있는 세션이
사용하고 있는 설정값을 데이터베이스 설정 값으로 지정할 때
사용한다.
세션이 사용할 서버 환경 설정 기본값 지정은 데이터베이스 단위로 지정할 수도 있지만, 롤에서 지정할 수도 있다; ALTER ROLE 참고. 두 지정이 서로 같은 변수인 경우는 롤에서 지정한 값을 사용한다.
test
데이터베이스에서 인덱스를 사용한 탐색을 안하게:
ALTER DATABASE test SET enable_indexscan TO off;
ALTER DATABASE
구문은
PostgreSQL 확장 기능이다.