我正在为django项目使用Postgres,我目前正在实现一个数据库备份/还原系统,该系统在用户单击backup时执行pg_dump,然后单击restore执行pg_restore。
在它真正尝试执行pg_restore之前,一切看起来都很好,而此时它会出现以下错误:
pg_restore: pg_restore (db)错误来自TOC条目3206;0注释扩展plpgsql pg_restore: pg_restore (db)无法执行查询:错误:必须是扩展plpgsql命令的所有者是:对扩展plpgsql的注释是'PL/pgSQL过程语言‘;
我研究了plpgsql是什么等等,并且我理解这一点,关于错误,我尝试手动将“扩展所有者”设置为执行脚本并拥有数据库本身的用户,但这并没有改变什么,这一点都没有改变,因为它在尝试设置所有内容的注释时出错,这真的很烦人。
所有这些都是由pg_dump自动创建的,因此不能删除注释行,也没有禁用注释的标志(我已经知道了),所以我确实无法解决这个问题。
发布于 2012-08-02 03:00:00
pg_restore似乎试图恢复一些您不拥有的额外数据。尝试将-n public
选项添加到pg_restore命令行。它只告诉pg_restore只还原公共模式的内容。您的命令行应该看起来像
pg_restore -U username -c -n public -d database_name
发布于 2012-09-04 09:04:24
我在这个页面上找到了以下解决办法:
http://archives.postgresql.org/pgsql-general/2011-10/msg00826.php
这样做的想法是使用pg_restore -l列出归档的内容,grep删除用户没有恢复权限的扩展,并在还原时使用pg_restore -L使用这个省略列表。
例如:
pg_restore -l ~/database.dump | grep -v "EXTENSION - plpgsql" > ~/restore_elements
pg_restore -L ~/restore_elements ~/database.dump
发布于 2019-10-17 04:00:00
如果您正在运行Postgres 11's (or higher) version of pg_dump
,那么您可以利用新的--no-comments
标志。
https://stackoverflow.com/questions/10169203
复制