次のコマンドを使用して、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_dump
生成を詳しく調べたところ、SQL が含まれていることがわかりました
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
がpublic
スキーマとを変更する権限を持っていないことplpgsql
です。
この問題を解決するにはどうすればよいですか?
plpgsql
、DROP EXTENSION plpgsql
あなたの前にpg_dump
。これは、アプリをスーパーユーザーにするよりも安全であり、エラーを無視するよりも便利です(--single-transaction
またはを使用すると爆弾が発生します-v ON_ERROR_STOP=1
)。これは既知の問題であり、[Postgres開発者によって詳細に議論されました| postgresql.org/message-id/…9.3では修正されていません。