【问题标题】:Does pg_restore or pg_dump add statements to the schema?pg_restore 或 pg_dump 是否向模式添加语句?
【发布时间】:2011-03-23 15:42:55
【问题描述】:

我有一个数据库,我已经使用了一段时间了。我稍微改进了它的模式,想要比较新模式和旧模式之间的差异,所以我转储了两个模式并做了一个差异。在旧模式中,我看到一些在新模式中不可见的“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”语句。

有人有类似经历吗?有什么想法可能会介绍这些陈述吗?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    针对您的评论,我猜是 PostgreSQL 版本迁移导致了这个问题。在 7.2 中 tsearch2 是一个外部 contrib 模块,但在 PostgreSQL 8.3 中它被集成到核心中。所以那些缺失的 OPERATOR FAMILY 可能来自 PostgreSQL 8.3 的 pg_catalog 而不是你自己的架构。

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

    【讨论】:

    • 是的,我们已将架构从 7.4 迁移到 8.3。这会导致这种情况吗?
    • 很可能,我更新了我的答案。建议的解决方案有效吗?
    • 是的,是旧版本的 tsearch 造成的。
    猜你喜欢
    • 1970-01-01
    • 2015-04-08
    • 2011-01-06
    • 2013-05-21
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多