79

私はdjangoプロジェクトにPostgresを使用しており、現在、ユーザーがバックアップをクリックするとpg_dumpを実行し、バックアップの復元をクリックするとpg_restoreを実行するデータベースバックアップ/復元システムを実装しています。

実際に pg_restore を実行しようとすると、次のエラーが発生します。

pg_restore: [archiver (db)] TOC エントリ 3206 からのエラー。0 0 コメント拡張 plpgsql pg_restore: [アーカイバ (db)] はクエリを実行できませんでした: エラー: 拡張機能 plpgsql の所有者でなければなりません コマンドは: 拡張機能のコメント plpgsql IS 'PL/pgSQL procedural language';

私はplpgsqlが何であるかなどを調べましたが、それを理解しています。エラーに関して、スクリプトを実行してデータベース自体を所有するユーザーに「拡張機能の所有者」を手動で設定しようとしましたが、何も変更されませんでした。すべてのもののコメントを設定しようとすると、エラーが発生します

これはすべてpg_dumpによって自動的に作成されるため、コメント行を削除することはできず、コメントを無効にするフラグはありません(私は知っています)。この問題を解決する方法について本当に困っています。

4

6 に答える 6

132

pg_restoreは、所有していない余分なデータを復元しようとしているようです。-n publicpg_restoreコマンドラインにオプションを追加してみてください。pg_restoreにパブリックスキーマのコンテンツのみを復元するように指示します。コマンドラインは次のようになります

pg_restore -U username -c -n public -d database_name
于 2012-08-02T11:00:00.970 に答える
18

このページで次の回避策を見つけました。

http://archives.postgresql.org/pgsql-general/2011-10/msg00826.php

アイデアは、pg_restore -l を使用してアーカイブの内容を一覧表示し、ユーザーが復元する権限を持っていない拡張子を grep し、復元時に pg_restore -L を使用してこの省略されたリストを使用することです。

例えば:

pg_restore -l ~/database.dump | grep -v "EXTENSION - plpgsql" > ~/restore_elements
pg_restore -L ~/restore_elements ~/database.dump
于 2012-09-04T17:04:24.230 に答える
3

別のユーザーによって作成された DB にロードしていますか? 可能であれば、DB とその既存のオブジェクトを作成したのと同じユーザーを使用して復元してみてください。

于 2012-04-16T05:47:20.640 に答える
3

このコマンドの後に機能します-

Deepak@deepak:~$ sudo -i -u postgres
postgres@deepak:~$ psql 
psql (9.3.5)
Type "help" for help.

postgres=# GRANT ALL PRIVILEGES ON DATABASE database_name TO user;
postgres=# GRANT
于 2015-04-10T11:25:59.223 に答える