データベースを変更する(ALTER DATABASE)

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

(Last modified: )

データベース毎の設定を変更する

最初にデータベース毎の設定を変更する方法です。次の書式を使用します。

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 に設定します。

create database hamster connection limit 5;

データベース毎の設定を変更する(1)

データベースが作成されました。確認のためにシステムカタログの一つである pg_database からデータベースの一覧と同時接続数を取得してみます。

select datname, datconnlimit from pg_database;

データベース毎の設定を変更する(2)

hamster データベースが作成されており、同時接続数が 5 になっていることが確認できます。

それでは ALTER DATABASE コマンドを使い、 hamster データベースの同時接続数を 3 に変更してみます。次のように実行してください。

alter database hamster connection limit 3;

データベース毎の設定を変更する(3)

同時接続数が 3 に変更されました。確認のためにあらためて pg_database からデータベースの一覧と同時接続数を取得してみます。

データベース毎の設定を変更する(4)

hamster データベースの同時接続数が 3 になっていることが確認できます。

データベースの名前を変更する

次にデータベースの名前を変更する方法です。次の書式を使用します。

ALTER DATABASE name RENAME TO new_name

データベース( name )の名前を別の名前( new_name )に変更します。

データベースの名前を変更するには、コマンドを実行するロールがスーパーユーザーか、データベースの所有者でかつ CREATEDB の権限を持っている必要があります。接続中のデータベースの名前を変更することはできません。

-- --

それでは実際に試してみます。先ほど作成した hamster データベースの名前を rabbit に変更します。次のように実行してください。

alter database hamster rename to rabbit;

データベースの名前を変更する(1)

データベースの名前を変更することができました。確認のために pg_database からデータベースの一覧を取得してみます。

select datname, pg_authid.rolname as dbrollname 
  from pg_database 
  join pg_authid on pg_authid.oid = pg_database.datdba;

データベースの名前を変更する(2)

hamster データベースの名前が rabbit に変わっていることが確認できます。

データベースの所有者を変更する

次にデータベースの所有者を変更する方法です。次の書式を使用します。

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

データベース( name )の所有者を別のロール( new_owner )に変更します。

データベースの名前を変更するには、コマンドを実行するロールがスーパーユーザーか、データベースの所有者でかつ新しい所有者の直接的または間接的にメンバであり、CREATEDB 権限を持っている必要があります。

-- --

それでは実際に試してみます。作成済みの rabbit データベースの所有者は現在 postgres ロールです。

\l rabbit

データベースの所有者を変更する(1)

rabbit データベースの所有者を momo ロールに変更します。次のように実行してください。

alter database rabbit owner to momo;

データベースの所有者を変更する(2)

データベースの所有者が変更されました。確認のためにあらためて \l コマンドを実行してみます。

データベースの所有者を変更する(3)

rabbit データベースの所有者が momo ロールに変更されていることが確認できました。

その他

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 コマンドを使ってデータベースを変更する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。