当我在我的数据库上运行pg_dump时,它将我的一个视图(orders_plus)转换为一个表,然后创建一个规则,我猜它将它放回到相当于一个视图。这似乎没问题(虽然很奇怪)。但是,在'CREATE RULE'之后,它就是这一行:
ALTER VIEW orders_plus SET ();
这不是一个有效的命令,因此我在恢复数据库时遇到错误。
答案 0 :(得分:1)
pg_dump绝不应该这样做。这是您的服务器或客户端的问题。既然你从Apple那里得到了它,它可以定制跟进它们。
我的猜测是其中一个pg_get_*
函数失败了。这可能是系统表中数据的问题,也可能是服务器端功能的问题。但我以前从未见过这样的事情,所以苹果公司就是开始的地方。
答案 1 :(得分:1)
...... 3年后......
你似乎偶然发现了v9.2.1中的一个错误,该错误已在v9.2.2中修复。
修复具有循环依赖关系且无关系的视图的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)。