次のコマンドを使用して、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では修正されていません。