createuser 時にロールの属性設定をする方法

CnetOS のベースリポジトリにあるPostgreSQLのバージョンによって、createuser の動作が異なる件。

知人に何回も聞かれるのでメモ。

CnetOS 6.x(PostgreSQL 8.4)の場合

$ createuser -U postgres test1
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n

上記のように、ユーザ作成時に一部の属性を対話形式で設定できる。

CnetOS 7.x(PostgreSQL 9.2)の場合

$ createuser -U postgres test1

PostgreSQL 9.2 以降は、何も聞いてこない。すべて n で答えたものとなる。

postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}
 test1     |                                                | {}


従来のように、createuser 時に対話式で一部の設定を行いたい場合は、「--interactive」オプションを付ける。

$ createuser -U postgres --interactive test2
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n

postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}
 test1     |                                                | {}
 test2     | Create DB                                      | {}


「--interactive」オプションは、9.2 以降のドキュメントに記載されている。

PostgreSQL 9.2
https://www.postgresql.jp/document/9.2/html/app-createuser.html


リリースノートを探したら、9.2のやつに記載されていた。
https://www.postgresql.jp/document/9.2/html/release-9-2.html

createuserは、デフォルトではオプション設定のためのプロンプトを表示しないようになりました。(Peter Eisentraut)

以前と同じ動作をさせるには--interactiveを使ってください。

--interactiveが指定されていなければ、dropuserはユーザ名のプロンプトを表示しないようにしました。(Peter Eisentraut)