ALTER ROLE name [ [ WITH ] option [ ... ] ]
ここでoptionは以下の通りです。
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| CONNECTION LIMIT connlimit
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
ALTER ROLE name RENAME TO new_name
ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET ALL
ALTER ROLEはPostgreSQLのロールの属性を変更します。
このコマンドの最初の構文では、CREATE ROLEで指定可能な多くのロール属性を変更することができます。 (指定し得るすべての属性に対応していますが、メンバ資格の追加および削除用のオプションはありません。 追加および削除にはGRANTとREVOKEを使用してください。) このコマンドで指定しなかった属性は以前の設定のまま残ります。 データベーススーパーユーザはすべてのロールのすべての属性を変更することができます。 CREATEROLE権限を持つロールは、スーパーユーザおよびレプリケーション以外のロールに対してすべての属性を変更することができます。 通常のロールは自身のパスワードのみを変更することができます。
2番目の構文ではロールの名前を変更することができます。 データベーススーパーユーザはすべてのロールの名前を変更できます。 CREATEROLE権限を持つロールはスーパーユーザ以外のロールに対してその名前を変更できます。 現在のセッションユーザの名前を変更することはできません。 (必要ならば別のユーザで接続してください)。 MD5暗号化パスワードではロール名を暗号用のソルトとして使用しますので、パスワードがMD5で暗号化されている場合、ロール名を変更するとパスワードは空になります。
残りの構文では、全データベース用、またはIN DATABASE句が指定された場合はそのデータベース用のセッションに対するロールの設定変数についてのセッションデフォルトを変更します。 ロール名の代わりにALLを指定すると、すべてのロール用の設定を変更します。 ALLとIN DATABASEを一緒に使用することは実質ALTER DATABASE ... SET ...コマンドの使用と同じです。
その後、ロールが新しいセッションを始めると常に、postgresql.conf内の設定やpostgresコマンドラインから受け取った設定よりも優先されて、指定された値がセッションのデフォルトとなります。 これはログイン時のみに発生します。 SET ROLEまたはSET SESSION AUTHORIZATIONを実行しても新しい設定値は設定されません。 全データベースに対する設定よりも、ロールに割り当てたデータベース固有の設定が優先します。 特定のデータベースまたは特定のロールに対する設定は、すべてのロールに対する設定よりも優先します。
スーパーユーザはすべてのユーザのセッションのデフォルトを変更することができます。 CREATEROLE権限を持つロールはスーパーユーザ以外のロールのデフォルトを変更することができます。 通常のロールは自身のデフォルトのみを設定することができます。 設定変数の中にはこの方法で変更できないものがあります。 また、スーパーユーザがこのコマンドを発行した時にのみ変更できるものもあります。 スーパーユーザのみがすべてのデータベースにおけるすべてのロール用の設定を変更することができます。
属性を変更するロールの名前です。
これらの句は、元々CREATE ROLEで設定された属性を変更します。 詳細はCREATE ROLEのマニュアルページを参照してください。
ロールの新しい名前です。
設定変数を設定する対象のデータベースの名前です。
指定した設定パラメータに対して、ロールのセッションデフォルトを指定した値に設定します。 valueがDEFAULT、またはRESETが使用されていた場合、ロール固有の変数設定は削除され、新しいセッションではロールはシステム全体のデフォルト設定を継承します。 すべてのロール固有の設定を削除するにはRESET ALLを使用してください。 SET FROM CURRENTはセッションのパラメータ値をロール固有の値として保管します。 IN DATABASEが指定された場合、設定パラメータは指定されたロールとデータベースのみで設定または削除されます。
ロール固有の変数設定はログイン時のみに影響を与えます。 SET ROLEおよびSET SESSION AUTHORIZATIONはロール固有の変数設定を処理しません。
新規にロールを追加するにはCREATE ROLEを使用してください。 また、ロールを削除するにはDROP ROLEを使用してください。
ALTER ROLEではロールのメンバ資格を変更できません。 メンバ資格の変更にはGRANTおよびREVOKEを使用してください。
このコマンドで暗号化しないパスワードを指定するときには注意しなければなりません。 パスワードはサーバに平文で送信されます。 クライアントのコマンド履歴やサーバのログにこれが残ってしまうかもしれません。 psqlには\passwordコマンドがあります。 これを使用してロールのパスワードを平文のパスワードをさらすことなく変更することができます。
ロールではなくデータベースにセッションのデフォルトを結びつけることもできます。 ALTER DATABASEを参照してください。 競合する場合、データベースとロールの組み合わせに固有な設定はロール固有の設定よりも優先し、ロール固有の設定はデータベース固有の設定よりも優先します。
ロールのパスワードを変更します。
ALTER ROLE davide WITH PASSWORD 'hu8jmn3';
ロールのパスワードを削除します。
ALTER ROLE davide WITH PASSWORD NULL;
パスワードの有効期限を変更します。 以下では、2015年5月4日正午(ただしUTCより1時間進んだタイムゾーンを使用)にパスワードが無効となるように変更しています。
ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';
パスワードの有効期限を無効にします。
ALTER ROLE fred VALID UNTIL 'infinity';
ロールに他のロールの作成権限と新しいデータベースの作成権限を与えます。
ALTER ROLE miriam CREATEROLE CREATEDB;
ロールにmaintenance_work_memパラメータ用のデフォルトとは異なる設定を与えます。
ALTER ROLE worker_bee SET maintenance_work_mem = 100000;
ロールにデータベース固有のclient_min_messagesパラメータ用のデフォルトとは異なる設定を与えます。
ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;