123

コマンドを使用して、Postgres データベースの所有者のいないクリーンなバックアップをダンプしました

pg_dump sample_database -O -c -U

後で、データベースを復元すると

psql -d sample_database -U app_name

ただし、データの復元を妨げるいくつかのエラーが発生しました。

ERROR:  must be owner of extension plpgsql
ERROR:  must be owner of schema public
ERROR:  schema "public" already exists
ERROR:  must be owner of schema public
CREATE EXTENSION
ERROR:  must be owner of extension plpgsql

SQL が生成するプレーンテキストを掘り下げたところ、 pg_dumpSQL が含まれていることがわかりました。

CREATE SCHEMA public;
COMMENT ON SCHEMA public IS 'standard public schema';
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';

原因は、ユーザーがスキーマapp_nameを変更する権限を持っていないためだと思います.publicplpgsql

どうすればこの問題を解決できますか?

4

11 に答える 11

73

この問題を解決するには、適切な所有権のアクセス許可を割り当てる必要があります。以下を試してください。これにより、特定のユーザーの権限に関連するすべての問題が解決されますが、コメントに記載されているように、これは本番環境では使用しないでください。

root@server:/var/log/postgresql# sudo -u postgres psql
psql (8.4.4)
Type "help" for help.

postgres=# \du
               List of roles
    Role name    | Attributes  | Member of
-----------------+-------------+-----------
 <user-name>    | Superuser   | {}
                 : Create DB
 postgres       | Superuser   | {}
                 : Create role
                 : Create DB

postgres=# alter role <user-name> superuser;
ALTER ROLE
postgres=#

したがって、スーパーユーザーアカウントでデータベースに接続し、ステートメントsudo -u postgres psqlを実行します。ALTER ROLE <user-name> Superuser;

これはマルチサイトホスティングサーバーでの最善の解決策ではないことに注意してください。代わりに、個々の役割の割り当てを確認してください:https : //www.postgresql.org/docs/current/static/sql-set-role.htmlおよびhttps ://www.postgresql.org/docs/current/static/sql-alterrole.html

于 2013-03-16T18:04:13.937 に答える
14

この場合、おそらくエラー メッセージを安全に無視できます。public スキーマにコメントを追加できず、plpgsql (既にインストールされているはずです) をインストールしても、実際の問題は発生しません。

ただし、完全な再インストールを行う場合は、適切な権限を持つユーザーが必要です。もちろん、それはアプリケーションが日常的に実行するユーザーであってはなりません。

于 2012-11-16T09:31:30.873 に答える