我有一个数据库,我已经使用了一段时间了。我稍微改进了它的模式并希望比较新模式和旧模式之间的差异,所以我转储了两个模式并进行了比较。在旧架构中,我看到一些在新架构中不可见的“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 版本迁移导致的。在 7.2 中,tsearch2 是一个外部贡献模块,但在 PostgreSQL 8.3 中,它被集成到核心中。因此,那些缺失的 OPERATOR FAMILY 可能来自 PostgreSQL 8.3 的 pg_catalog 而不是您自己的模式。
但我认为您可以使用contrib/uninstall_tsearch2.sql
脚本(通常在/usr/share/postgresql-VER/contrib/
) 卸载然后使用 contrib/tsearch2.sql
脚本重新安装。忽略您收到的任何错误,这些错误应该是安全的,因为您不能删除您当前在表中使用的类型。
关于postgresql - pg_restore 或 pg_dump 是否将语句添加到模式中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5385798/