如何解决在还原PostgreSQL数据库时出现的权限问题

129

我使用以下命令生成了一个干净无所有者的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 的权限。

我该如何解决这个问题?


7
如果你不需要 plpgsql,在执行 pg_dump 前先运行 DROP EXTENSION plpgsql。这比将你的应用程序设置为超级用户更安全,也比忽略错误更方便(如果使用 --single-transaction-v ON_ERROR_STOP=1 会导致失败)。这是一个已知的问题,在Postgres开发人员的讨论中详细讨论过,但截至9.3版本仍未修复。 - Mark E. Haase
11个回答

1
对我来说,我正在使用 pgAdmin 设置数据库,似乎在创建数据库时设置所有者是不够的。我还需要导航到'public' schema并在那里设置owner(最初为“postgres”)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接