0

当我在我的数据库上运行 pg_dump 时,它会将我的一个视图 (orders_plus) 转换为一个表,然后创建一个我猜想将其放回视图的规则。这似乎没问题(虽然很奇怪)。但是,就在“创建规则”之后,它放置了这一行:

ALTER VIEW orders_plus SET ();

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

4

2 回答 2

1

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

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

于 2013-11-13T02:55:52.400 回答
1

... 3年后...

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

请参阅v9.2.2 发行说明

修复 pg_dump 用于具有循环依赖且没有关系选项的视图 (Tom Lane)

当视图涉及循环依赖时,先前对转储关系选项的修复不适用于视图没有选项的情况;它发出了无效语法的 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)。

于 2016-10-17T15:03:45.850 回答