概要
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が作成されています。
