]ここでoptionは以下の通りです。ROLEは、PostgreSQLデータベースクラスタに新しいロールを加えます。ロールとは、データベースオブジェクトを所有することができ、データベース権限を持つことができる実体のことです。ロールは、使用状況に応じて「ユーザ」、「グループ」、もしくは、その両方であるとみなすことができます。ユーザの管理と認証に関する情報については、第21章と第20章を参照してください。このコマンドを使用するには、CREATEROLE権限を持つか、データベースのスーパーユーザでなければなりません。ロールはデータベースクラスタのレベルで定義されるため、クラスタ内のすべてのデータベースで有効となることに注意してください。パラメータname新しいロールの名前です。SUPERUSERNOSUPERUSERこれらの句によって、新しいロールが「スーパーユーザ」となるかどうかが決まります。「スーパーユーザ」はデータベース内のすべてのアクセス制限より優先します。スーパーユーザという状態は危険ですので、本当に必要な場合にのみ使用しなければなりません。新しくスーパーユーザを作成するには、スーパーユーザでなければなりません。指定されなかった場合のデフォルトはNOSUPERUSERです。CREATEDBNOCREATEDBこれらの句はロールのデータベースの作成に関する権限を定義します。CREATEDBが指定された場合、定義されたロールは新しくデータベースを作成することができます。NOCREATEDBを使用した場合、そのロールにはデータベースを作成する権限が与えられません。指定されなかった場合のデフォルトはNOCREATEDBです。ROLEを実行)できるかどうかを決定します。CREATEROLE権限を持つロールはロールを変更することも削除することもできます。指定されなかった場合のデフォルトはNOCREATEROLEです。INHERITNOINHERITこれらの句は、ロールがそのロールが属するロールの権限を「継承」するかどうかを決定します。INHERIT属性を持つロールは自動的に、直接的にまたは間接的にメンバとして割り当てられたすべてのデータベース権限を使用します。ROLEを行った後にのみ利用可能です。指定されなかった場合のデフォルトはINHERITです。LOGINNOLOGINこれらの句により、ロールがログイン可能かどうか、つまり、そのロールをクライアント接続時にセッションを認証するための名前として使用することができるかどうかが決まります。LOGIN属性を持つロールはユーザとみなすことができます。この属性を持たないロールは、データベース権限を管理する際に有用ですが、普通の意味ではユーザとはいえません。USERで呼び出された場合は例外です。REPLICATIONNOREPLICATIONこれらの句は、ロールがレプリケーションロールかどうかを決定します。レプリケーションモード(物理または論理レプリケーション)のサーバに接続できるためには、またレプリケーションスロットを作成または削除できるためには、ロールはこの属性(またはスーパーユーザ)を持っている必要があります。REPLICATION属性を持つロールは、非常に高度な権限を持つものです。このため実際にレプリケーションで使用するロールでのみ使用しなければなりません。指定されない場合のデフォルトはNOREPLICATIONです。BYPASSRLSNOBYPASSRLSこれらの構文は、ロールがすべての行単位セキュリティ(RLS)ポリシーを無視するかどうかを決定します。NOBYPASSRLSがデフォルトです。pg_dumpはテーブルのすべての内容が確実にダンプされるようにするため、row_securityをデフォルトでOFFに設定することに注意してください。pg_dumpを実行するユーザが適切な権限を持っていなければ、エラーが返されます。スーパーユーザおよびテーブルの所有者は、常にRLSを無視します。connlimitロールがログイン可能である場合、これは、ロールが確立できる最大同時接続数を指定します。-1(デフォルト)は無制限を意味します。通常の接続のみがこの制限の対象として数えられることに注意してください。準備されたトランザクションやバックグラウンドワーカの接続はこの制限の対象にはなりません。NULLロールのパスワードを設定します。(パスワードはLOGIN属性を持つロールでのみ使用されますが、この属性を持たないロールにも定義することができます。パスワード認証を行う予定がなければ、このオプションを省略することができます。パスワードの指定がなければ、パスワードがNULLに設定され、そのアカウントでのパスワード認証は常に失敗します。NULLと記述することもできます。空の文字列を指定した場合もパスワードをNULLに設定しますが、PostgreSQLのバージョン10より前はそのようになっていませんでした。以前のバージョンでは、認証方式と細かいバージョンによって空の文字列が使えたり使えなかったりし、また、いずれにせよlibpqは空の文字列を拒絶していました。この曖昧さを避けるためには、空の文字列の指定は避けるのが良いです。パスワードは必ず暗号化されてシステムカタログに保存されます。ENCRYPTEDキーワードには何の効果もありませんが、後方互換性のために受け付けられます。暗号化の方法は設定パラメータpassword_encryptionによって決定されます。指定されたパスワード文字列が既にMD5またはSCRAMの暗号化形式になっている場合は、password_encryptionと関係なく、そのまま保存されます(指定のパスワードを暗号化した文字列を復号できないので、パスワードを別の形式で暗号化することができないからです)。これにより、ダンプ/リストア時に暗号化したパスワードを再ロードすることができます。UNTIL句は、ロールのパスワードが無効になる日時を設定します。この句が省略された場合、パスワードは永遠に有効になります。ROLE句には、新しく作成するロールを新規にメンバとして追加する既存の1つ以上のロールを列挙します。(新しく作成するロールを管理者として追加するオプションがないことに注意してください。このためには別途GRANTコマンドを使用してください。ROLEの別名で、廃止予定です。role_nameROLEには、新しく作成するロールのメンバとして自動的に追加する既存の1つ以上のロールを列挙します。(これは実質的に新しく作成したロールを「グループ」とします。OPTIONとして追加される点が異なります。新しく作成されるロールのメンバ資格を他者に与えることができる権利を、指定されたロールに与えます。role_nameUSER句はROLE句の別名で廃止予定です。uidSYSID句は無視されますが、後方互換性を維持するために受け付けられます。ROLEを使用してください。ROLEコマンドで変更可能です。グループとして使用しているロールのメンバの追加、および、削除についての推奨方法は、GRANTとREVOKEを使用することです。UNTIL句は、パスワードの有効期限を定義するだけで、ロール自体の有効期限ではありません。パスワードを使わない認証方式でログインを行う場合には、この有効期限は強制されません。INHERIT属性は、許可可能な権限(つまり、データベースオブジェクトに対するアクセス権限とロールのメンバ資格)の継承を管理します。ROLEで設定される特別なロール属性には適用されません。INHERITが設定されていたとしても、例えば、CREATEDB権限を持つロールのメンバであっても、データベース作成権限は即座に付与されません。ROLEを使用してそのロールにならなければなりません。後方互換性を維持するため、INHERIT属性はデフォルトです。以前のリリースのPostgreSQLでは、ユーザは常にメンバとなっているすべてのグループの権限でアクセスできました。NOINHERITの方が標準SQLの規定の意味により合ったものを提供します。CREATEROLE権限には注意が必要です。ロールという権限には継承という概念がありません。あるロールが特定の権限を持っていなくても、別のロールを作成できることを意味します。簡単に自身の持つ権限と異なる権限(スーパーユーザ権限を持つロールは除きます)を持つ別のロールを作成できてしまいます。CREATEROLE権限を持ち、CREATEDB権限を持たない「user」というロールが、CREATEDB権限を持つロールを新規に作成することができます。したがって、CREATEROLE権限を持つロールは、ほとんどスーパーユーザ権限を持つロールと同じであるものと考えてください。ROLEと同じ機能を持つプログラム(実際にこのコマンドを呼び出しています)createuserがあり、コマンドシェルから実行することができます。LIMITオプションが加える制限は厳密ではありません。そのロールに1つだけ接続「スロット」が残っていた時に、ほぼ同時に2つのセッションが新しく始まった場合、両方とも失敗する可能性があります。この制限はスーパーユーザには適用されません。このコマンドで暗号化しないパスワードを指定するときには注意しなければなりません。パスワードはサーバに平文で送信されます。クライアントのコマンド履歴やサーバのログにこれが残ってしまうかもしれません。createuserコマンドはパスワードを暗号化して送信します。psqlには\passwordコマンドがあり、これを使用して後でパスワードを安全に変更することができます。例ログイン可能なロールを作成します。パスワードはありません。LOGIN;パスワード付きのロールを作成します。2004年まで有効なパスワードを持つロールを作成します。2005年に1秒でも入った時点でパスワードは無効になります。'2005-01-01';データベースを作成でき、かつ、ロールを管理できるロールを作成します。ROLE文は標準SQLで規定されています。SQLでは以下の構文のみを要求しています。ROLEのオプションはPostgreSQLの拡張です。標準SQLでは、ユーザとロールという概念を定義し、それらを別の概念としてみなしています。ユーザを定義するコマンドはすべて、各データベース実装で規定するものとしています。PostgreSQLでは、ユーザとロールを単一の実体に統一することを選択しています。したがって、ロールは標準よりも非常に多くのオプションの属性を持っています。ユーザはNOINHERIT属性を与えること、ロールはINHERIT属性を与えることで、標準SQLで規定された振舞いに最も近くなります。