在pg_dump定位到另一台机器的过程中,拒绝创建“ pg_catalog.tablename”的权限


11

我正在尝试将某些表从9.5 beta 2转储到9.4.4服务器。我使用的命令的形式是相当标准的:

pg_dump -t table dbname | psql -h hostname -d dbname

我正在使用Postgres用户,我意识到这可能并不理想,但是因为这两个都是我仅使用的dev数据处理框,所以与随后的错误有关。最初,我得到了错误

错误:无法识别的配置参数“ row_security”

这是预期的,因为此功能是9.5中的新增功能,是的,我意识到不建议在不同的Postgres版本之间使用pg_dump,但是,令人遗憾的是,由于我遇到了一个非常模糊的错误,并且需要移动一个大的错误,这是不可避免的一次静态数据量。

因此,使用此可怕的技巧来删除row_security错误,然后在第一个错误上启用stop:

pg_dump -t tablemame dbname |sed 's/SET row_security = off;//'|
psql -v ON_ERROR_STOP=1 -h hostname -d dbname

我现在得到:

错误:拒绝创建“ pg_catalog.tablename”的权限详细信息:当前不允许修改系统目录

尽管可能不希望使用Postgres用户/角色,但我的理解是应该没有这种性质的权限问题。对于任何建议,我都持开放态度,因为这是一次性操作,并且它们是未连接到任何实时服务的数据处理开发箱,因此权宜于优先于理想的公司数据访问策略。话虽如此,最好了解如何正确执行此操作,并在将来避免这样做。

Answers:


13

事实证明,这是由于当您使用pg_dump进行转储的模式在目标数据库/机器上不存在时,会出现一些模糊的错误消息。我将离开这个问题,希望它可以对其他人有所帮助。


也发生在我身上,幸运的是我发现了这个。只需手动创建“公共”模式即可。
罗伯特·麦克斯

@RobertMikes。乐意效劳。这是一个不太明显的错误。
John Powell

谢谢-幸运的是我在参与其中之前就发现了这一点!
James Fry

+1。这个问题也让我震惊了!
杰·康明斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.