postgresql - pg_restore 或 pg_dump 是否将语句添加到模式中?

标签 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”语句。

有没有人有过类似的经历?有什么想法可能会引入这些陈述吗?

最佳答案

针对您的评论,我猜想是 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/

相关文章:

python - 如何仅使用 CASE 或 COALESCE 表达式来过滤 Django 查询集?

postgresql - pg-promise 更新自定义数组中的位置

database - 何时创建新的 RDS 实例与新数据库?

java - 如何将不同模式的公共(public)数据插入到临时表中?

按时间排序的每组 SQL 平均金额

python - 即使数据存在,使用 psql 的 SELECT 也不会返回任何行

ruby - 如何找出复制的行数?

javascript - 函数不返回 pg-pool 结果

sql - 如何在 PostGreSQL 中针对 XSD 验证 XML 变量

mysql - 为了 Heroku,从 MySQL 切换到 PostgreSQL for Ruby on Rails