PostgreSQL | データベース | データベースの変更(ALTER DATABASE)

ALTER DATABASE コマンドを使用して、作成済みのデータベースを変更する方法について説明する。

データベース設定の変更

まず、データベースごとに設定を変更する方法について見てみる。形式は次のとおりである。

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

option : 
    ALLOW_CONNECTIONS allowconn
    CONNECTION LIMIT connlimit
    IS_TEMPLATE istemplate

データベース (name) の設定を変更する。変更できる設定は、データベースを作成するときに設定できる ALLOW_CONNECTIONSCONNECTION LIMITIS_TEMPLATE の 3 つである。

データベースの設定を変更するには、コマンドを実行するロールがスーパーユーザーであるか、データベース所有者である必要がある。

それでは実際に試してみる。まず、スーパーユーザーのロールで hamster データベースを作成する。このとき、同時接続数を設定する CONNECTION LIMIT5 に設定する。

devkuma=# create database hamster connection limit 5;
CREATE DATABASE
devkuma=#

データベースが作成された。確認のため、システムカタログの 1 つである 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 コマンドを使用してデータベースを変更する方法について説明した。