概要
PostgreSQLに新しいユーザアカウント(ロール)を作成する方法についてです。
PostgreSQLでは、ユーザとロールは同一です。
ユーザを作成するには、主に以下の2つの方法があります。
- コマンドプロンプト等でcreateuserコマンドを実行
- psqlなどでCREATE USERコマンド(SQLコマンド)を実行
今回は以下の環境で確認しています。
| OS | Windows 10 64bit |
| バージョン | PostgreSQL 16.4 |
それでは、2つの方法それぞれについて説明します。
createuserコマンド
createuserの構文は以下の通りです。
createuser [接続パラメータ...] [オプション...] ユーザ名ユーザ名は新しく作成するユーザの名前です。この名前は存在するすべてのロールと異なる名前でなければなりません。
また、新しいユーザを作成できるのは、スーパーユーザとCREATEROLE権限を持つユーザのみのため、それらのユーザで接続しなければなりません。
主なオプションは以下の通りです。
| オプション | 内容 |
|---|---|
| -d –createdb | 新しいユーザに対してデータベースの作成を許可します。 |
| -D –no-createdb | 新しいユーザに対してデータベースの作成を禁止します。(デフォルト) |
| -l –login | 新しいユーザに対してログインを許可します。 (デフォルト) |
| -L –no-login | 新しいユーザに対してログインを禁止します。 |
| -P –pwprompt | 新しいユーザのパスワードのプロンプトを表示します。(パスワードの設定) |
| -r –createrole | 新しいユーザに対して、他のロールの作成・変更・削除等を許可します。 |
| -R –no-createrole | 新しいユーザに対して新しいロールの作成を禁止します。(デフォルト) |
| -s –superuser | 新しいユーザはスーパーユーザになります。 |
| -S –no-superuser | 新しいユーザはスーパーユーザにはなりません。 (デフォルト) |
| -v –version | createuserのバージョンを表示し終了します。 |
| –replication | 新しいユーザはREPLICATION権限を持ちます。 |
| –no-replication | 新しいユーザはREPLICATION権限を持ちません。(デフォルト) |
| -? –help | createuserコマンドのコマンドライン引数の使用方法を表示し終了します。 |
主な接続オプションは以下の通りです。
| 接続パラメータ | 内容 |
|---|---|
| -h host –host=host | PostgreSQLサーバが稼働しているホスト名・IPアドレスを指定する。 |
| -p port –port=port | サーバが接続を監視するTCPポート番号を指定する。 |
| -U username –username=username | 接続に使用するユーザ名を指定する。(作成するユーザ名ではない) |
ユーザ名をtestuser1、データベース作成を許可した場合のコマンドの例です。
createuser -U postgres --createdb --no-superuser --no-createrole --no-replication -P testuser1実行すると以下のようになります。

最初と2回目のパスワード入力は、新しいユーザのパスワード設定のための入力です。
最後のパスワードはスーパーユーザである-Uオプションで指定したpostgresユーザのパスワード入力です。
CREATE USER(SQL)
SQLのCREATE USERは以下のような構文となります。
CREATE USER ユーザ名 [ [WITH] option [...] ]ユーザ名は新しく作成するユーザの名前です。この名前は存在するすべてのロールと異なる名前でなければなりません。
CREATE USERはCREATE ROLEの別名です。そのため実際にはCREATE ROLEが実行されます。
主に以下のオプションがあります。
| オプション | 内容 |
|---|---|
| SUPERUSER NOSUPERUSER | 新しいユーザがスーパーユーザとなるかどうかを指定します。 デフォルトはNOSUPERUSERです。 |
| CREATEDB NOCREATEDB | データベースの作成を許可するか指定します。 デフォルトはNOCREATEDBです。 |
| CREATEROLE NOCREATEROLE | 他のロールを作成・変更・削除等を許可するか指定します。 デフォルトはNOCREATEROLEです。 |
| LOGIN NOLOGIN | ログイン可能かどうか指定します。 デフォルトはNOLOGINですが、CREATE USERで実行した場合はLOGINとなります。 |
| REPLICATION NOREPLICATION | REPLICATION権限を持つか指定します。 デフォルトはNOREPLICATIONです。 |
| [ENCRYPTED] PASSWORD ‘password‘ | パスワードを指定します。 |
| VALID UNTIL ‘timestamp’ | パスワードが無効となる日時を指定します。 省略するとパスワードは永遠に有効となります。 |
ユーザ名をtestuser2、データベース作成を許可した場合の例です。
CREATE USER testuser2 WITH CREATEDB NOSUPERUSER NOCREATEROLE NOREPLICATION PASSWORD 'password' ;psqlにてスーパーユーザで接続後、SQLを実行すると以下のようになります。

終わりに
以上でユーザ作成についての説明は終了です。
psqlでユーザ一覧を確認すると、データベース作成可能な状態でtestuser1とtestuser2が作成されています。



