pg_restore或pg_dump是否为模式添加语句?

时间:2011-03-22 01:35:41

标签: postgresql

我有一个我一直在使用的数据库。我稍微改进了它的模式,并希望比较新模式和旧模式之间的差异,因此我转储了两个模式并进行了差异化。在旧模式中,我看到一些在新模式中不可见的“OPERATOR FAMILY”语句。如果它有任何区别,这些'OPERATOR FAMILY'语句与PostgreSQL的tsearch2 contrib包有关(例如:'CREATE OPERATOR FAMILY gin_tsvector_ops'等)。与tsearch2运算符相关的'OPERATOR CLASS'语句存在于两个模式中。此外,所有添加的“OPERATOR FAMILY”语句后面跟着同名的“OPERATOR CLASS”语句,尽管两个模式中都有“OPERATOR CLASS”语句。

真正奇怪的是,当我使用新架构创建数据库时,使用pg_dump转储其架构,使用pg_restore将其恢复到另一个数据库中,然后再次转储它 - “OPERATOR FAMILY”语句出现!我grep了contrib目录,但我找不到任何'CREATE OPERATOR FAMILY'语句。

任何人都有类似的经历吗?可能会引入这些陈述的任何想法?

1 个答案:

答案 0 :(得分:1)

在回复您的评论时,我猜测PostgreSQL版本迁移会导致这种情况。在7.2中,tsearch2是一个外部的贡献模块,但是在PostgreSQL 8.3中它被集成到了核心中。那些失踪的操作员家族可能来自PostgreSQL 8.3的pg_catalog,而不是你自己的架构。

但我认为你可以使用contrib/uninstall_tsearch2.sql脚本(通常在/usr/share/postgresql-VER/contrib/)来修复它,然后卸载然后使用contrib/tsearch2.sql脚本重新安装。忽略您获得的任何错误,这些错误应该是安全的,因为您不能删除当前在表中使用的类型。