我使用以下命令为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起未修复。