PostgreSQL | 데이터베이스(Database) | 데이터베이스 변경 (ALTER DATABASE)
ALTER DATABASE 명령을 사용하여 생성된 데이터베이스를 변경하는 방법에 대해 설명한다.
데이터베이스 설정 변경
먼저 데이터베이스마다 설정을 변경하는 방법에 대해 알아보자. 형식은 다음과 같다.
ALTER DATABASE name [ [ WITH ] option [ ... ] ]
option :
ALLOW_CONNECTIONS allowconn
CONNECTION LIMIT connlimit
IS_TEMPLATE istemplate
데이터베이스(name)의 설정을 변경한다. 변경할 수 있는 설정은 데이터베이스를 만들 때 설정 할 수있는 ALLOW_CONNECTIONS, CONNECTION LIMIT, IS_TEMPLATE 3가지 이다.
데이터베이스의 설정을 변경하려면, 명령을 수행하는 역할이 수퍼 유저이거나 데이터베이스 소유자이어야 한다.
–
그러면 실제로 해보도록 하자. 먼저 수퍼 유저의 역할 hamster 데이터베이스를 만든다. 이때 동시 연결 수를 설정하는 CONNECTION LIMIT를 5로 설정한다.
devkuma=# create database hamster connection limit 5;
CREATE DATABASE
devkuma=#
데이터베이스가 작성되었다. 확인을 위해 시스템 카탈로그의 하나 인 pg_database에서 데이터베이스 목록과 동시 연결 수를 조회해 본다.
devkuma=# select datname, datconnlimit from pg_database;
datname | datconnlimit
-----------+--------------
postgres | -1
template1 | -1
template0 | -1
sample | -1
devkuma | -1
devkuma2 | -1
hamster | 5
(7개 행)
devkuma=#
hamster 데이터베이스가 작성되고 있고, 동시 연결 수가 5로 되어있는 것을 확인할 수 있다.
그러면 ALTER DATABASE 명령을 사용하여 hamster 데이터베이스의 동시 연결 수를 3으로 변경하려고 한다. 다음과 같이 실행한다.
devkuma=# alter database hamster connection limit 3;
ALTER DATABASE
devkuma=#
동시 연결 수가 3으로 변경되었다. 확인을 위해 다시 pg_database에서 데이터베이스 목록과 동시 연결 수를 조회한다.
devkuma=# select datname, datconnlimit from pg_database;
datname | datconnlimit
-----------+--------------
postgres | -1
template1 | -1
template0 | -1
sample | -1
devkuma | -1
devkuma2 | -1
hamster | 3
(7개 행)
devkuma=#
hamster 데이터베이스의 동시 연결 수가 3으로 되어있는 것을 확인할 수 있다.
데이터베이스 이름 변경
다음 데이터베이스의 이름을 변경하는 방법에 대해 알아보자. 형식은 다음과 같다.
ALTER DATABASE name RENAME TO new_name
데이터베이스(name) 이름을 다른 이름(new_name)으로 변경한다.
데이터베이스의 이름을 변경하려면, 명령을 수행하는 역할이 수퍼 유저 또는 데이터베이스 소유자이면서 CREATEDB 권한을 가지고 있어야 한다. 연결된 데이터베이스의 이름을 변경할 수 없다.
–
그러면 실제로 해보도록 하자. 방금 만든 hamster 데이터베이스의 이름을 rabbit로 변경한다. 다음과 같이 실행한다.
devkuma=# alter database hamster rename to rabbit;
ALTER DATABASE
devkuma=#
데이터베이스의 이름을 변경 할 수 있었다. 확인을 위해 pg_database에서 데이터베이스 목록을 조회해 본다.
devkuma=# select datname, pg_authid.rolname as dbrollname
devkuma-# from pg_database
devkuma-# join pg_authid on pg_authid.oid = pg_database.datdba;
datname | dbrollname
-----------+------------
rabbit | postgres <<<<< hamster에서 rabbit으로 변경
devkuma2 | postgres
devkuma | postgres
sample | postgres
template0 | postgres
template1 | postgres
postgres | postgres
(7개 행)
devkuma=#
hamster 데이터베이스의 이름이 rabbit으로 바뀌어있는 것을 확인할 수 있다.
데이터베이스 소유자를 변경
다음 데이터베이스의 소유자를 변경하는 방법이다. 다음 형식을 사용한다.
ALTER DATABASE name OWNER TO {new_owner | CURRENT_USER | SESSION_USER}
데이터베이스(name)의 소유자를 다른 역할(new_owner)로 변경한다.
데이터베이스의 이름을 변경하려면, 명령을 수행하는 역할이 수퍼 유저이거나 데이터베이스 소유자이면서 새로운 소유자의 직접 또는 간접적으로 멤버이며, CREATEDB 권한을 가지고 있어야 한다.
–
그러면 실제로 해보도록 한다. 생성된 rabbit 데이터베이스의 소유자는 현재 postgres 역할이다.
devkuma=# \l rabbit
데이터베이스 목록
이름 | 소유주 | 인코딩 | Collate | Ctype | 액세스 권한
--------+----------+--------+------------------+------------------+-------------
rabbit | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 |
(1개 행)
devkuma=#
rabbit 데이터베이스의 소유자를 orange 역할로 변경하려고 한다. 먼저, orange 역할을 만들고, 다음과 같이 실행한다.
devkuma=# create role orange with login password 'apple';
CREATE ROLE
devkuma=#
데이터베이스의 소유자가 변경되었다. 확인을 위해 다시 \l
명령을 실행해 본다.
devkuma=# alter database rabbit owner to orange;
ALTER DATABASE
devkuma=# \l rabbit
데이터베이스 목록
이름 | 소유주 | 인코딩 | Collate | Ctype | 액세스 권한
--------+--------+--------+------------------+------------------+-------------
rabbit | orange | UTF8 | Korean_Korea.949 | Korean_Korea.949 |
(1개 행)
devkuma=#
rabbit 데이터베이스의 소유자가 orange 역할로 변경되는 것을 확인할 수 있다.
그 밖에
ALTER DATABASE 명령에는 그 밖에 다음과 같은 형식이 준비되어 있다.
ALTER DATABASE name SET TABLESPACE new_tablespace
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
–
여기까지 ALTER DATABASE 명령을 사용하여 데이터베이스를 변경하는 방법에 대해 설명하였다.