我使用以下命令为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
的权限。
我该如何解决这个问题呢?
发布于 2017-02-24 22:21:47
AWS RDS用户如果您收到此消息,那是因为您不是超级用户,根据aws文档,您不能成为超级用户。我发现我必须忽略这些错误。
发布于 2017-10-11 21:20:07
对于使用Google Cloud Platform的用户,任何错误都将停止导入过程。就我个人而言,根据我发出的pg_dump命令,我遇到了两个不同的错误:
1- The input is a PostgreSQL custom-format dump. Use the pg_restore command-line client to restore this dump to a database.
当您尝试以非纯文本格式转储DB时发生。即当命令缺少-Fp或--format=普通参数时。但是,如果将其添加到命令中,则可能会遇到以下错误:
2- SET SET SET SET SET SET CREATE EXTENSION ERROR: must be owner of extension plpgsql
这是一个权限问题,我无法使用GCP docs中提供的命令、当前线程中的提示或Google Postgres团队here的建议来解决。建议下发以下命令:
pg_dump -Fp --no-acl --no-owner -U myusername myDBName > mydump.sql
在我的例子中,唯一成功的方法是手动编辑转储文件,并注释掉所有与plpgsql相关的命令。
我希望这对依赖GCP的人有所帮助。
更新:
转储文件并注释掉扩展名更容易,特别是因为有些转储可能很大:pg_dump ... | grep -v -E '(CREATE\ EXTENSION|COMMENT\ ON)' > mydump.sql
可以将其范围缩小到plpgsql:pg_dump ... | grep -v -E '(CREATE\ EXTENSION\ IF\ NOT\ EXISTS\ plpgsql|COMMENT\ ON\ EXTENSION\ plpgsql)' > mydump.sql
发布于 2012-11-16 17:31:31
在这种情况下,您可能可以安全地忽略错误消息。未能向公共模式添加注释并安装plpgsql (应该已经安装)不会造成任何真正的问题。
但是,如果您想进行完整的重新安装,则需要具有适当权限的用户。当然,这不应该是您的应用程序例行公事运行的用户。
https://stackoverflow.com/questions/13410631
复制相似问题