ユーザーのロールとデータベースを自動的に作成するスクリプトを備えたPostgreSQL 9.5サーバーがあります。これらのデータベース内では、特定の拡張機能(pgcryptoなど)を有効にすると便利ですが、私が理解しているように、実行するにはスーパーユーザーである必要がありますCREATE EXTENSION。スーパーユーザーアカウントで手動でログインせずに、このような拡張機能を有効にする方法はありますか?
ユーザーのロールとデータベースを自動的に作成するスクリプトを備えたPostgreSQL 9.5サーバーがあります。これらのデータベース内では、特定の拡張機能(pgcryptoなど)を有効にすると便利ですが、私が理解しているように、実行するにはスーパーユーザーである必要がありますCREATE EXTENSION。スーパーユーザーアカウントで手動でログインせずに、このような拡張機能を有効にする方法はありますか?
回答:
拡張機能に関するドキュメントから、
スーパーユーザー(ブール)このパラメーターがtrue(デフォルト)の場合、スーパーユーザーのみが拡張を作成したり、拡張を新しいバージョンに更新したりできます。falseに設定されている場合、インストールまたは更新スクリプトでコマンドを実行するために必要な権限のみが必要です。
値はで設定されていないpgcrypto.controlため、デフォルトでtrueに設定されており、SuperUserが必要です。
これはCREATE EXTENSION、CREATE EXTENSIONのドキュメントがあなたを信じさせているにもかかわらず、データベースの単なる所有者になることはできないことを意味します。
私はハードに設定してみましたがfalse、喜びはありませんでした。Cは信頼できない言語であり、
エラー:言語cの許可が拒否されました
信頼できない言語で関数を作成できるのはスーパーユーザーだけです。
...もちろん、スーパーユーザーとしてc信頼することができUPDATE pg_language set lanpltrusted = true where lanname = 'c';ます。その後CREATE EXTENSION pgcrypto、非スーパーユーザーとして正常に動作します。しかし、ユーザーがソースを拡張ディレクトリにアップロードし、それをデータベースにインストールすることを心配する必要がある場合、それは悪い考えのように思えます。つまり、私はそれほど遠くに行きません。この猫の皮を剥ぐ別の方法を見つけます。
pg_dump拡張機能に関するステートメントをダンプしないようにするためのオプションがないことの意味は何ですか?現在、外部テキスト処理ツールを使用して、によってダンプされたSQLからこれらのステートメントを削除する必要がありますpg_dump。
template1、各ユーザーデータベースをtemplate1like から作成してみましたCREATE DATABASE foo OWNER=userfoo TEMPLATE=template1か?