pg_dump生成无效的SQL命令

时间:2013-08-30 19:10:10

标签: postgresql pg-dump

当我在我的数据库上运行pg_dump时,它将我的一个视图(orders_plus)转换为一个表,然后创建一个规则,我猜它将它放回到相当于一个视图。这似乎没问题(虽然很奇怪)。但是,在'CREATE RULE'之后,它就是这一行:

ALTER VIEW orders_plus SET ();

这不是一个有效的命令,因此我在恢复数据库时遇到错误。

2 个答案:

答案 0 :(得分:1)

pg_dump绝不应该这样做。这是您的服务器或客户端的问题。既然你从Apple那里得到了它,它可以定制跟进它们。

我的猜测是其中一个pg_get_*函数失败了。这可能是系统表中数据的问题,也可能是服务器端功能的问题。但我以前从未见过这样的事情,所以苹果公司就是开始的地方。

答案 1 :(得分:1)

...... 3年后......

你似乎偶然发现了v9.2.1中的一个错误,该错误已在v9.2.2中修复。

请参阅v9.2.2 release notes

  

修复具有循环依赖关系且无关系的视图的pg_dump   选项(汤姆巷)

     

在a中涉及视图时转储关系选项的先前修复   循环依赖不适用于视图具有的情况   没有选择;它发出ALTER VIEW foo SET(),这是无效的语法。

我最近在恢复/迁移生产数据库时注意到了完全相同的问题。我错误地使用了比数据库更旧版本的pg_dump;)

psql:dump.sql:27821784: ERROR:  syntax error at or near ")"
LINE 1: ALTER VIEW <viewname> SET ();

使用pg_dump v9.2.6时,问题就消失了。

为了完整性,这里有一些软件信息:Postgres版本9.2.6 GNU / Linux 2.6.18-406.el5#1 SMP Fri May 1 10:37:57 EDT 2015 x86_64。红帽企业版5.11(Tikanga)。