繁体   English   中英

pg_restore或pg_dump是否将语句添加到架构?

[英]Does pg_restore or pg_dump add statements to the schema?

我有一段时间以来一直在使用的数据库。 我稍微改进了它的架构,并希望比较新架构和旧架构之间的差异,因此我转储了两个架构并进行了比较。 在旧架构中,我看到了一些在新架构中不可见的“ OPERATOR FAMILY”语句。 如果有什么不同,那么这些“ OPERATOR FAMILY”语句与PostgreSQL的tsearch2 contrib软件包有关(例如:“ CREATE OPERATOR FAMILY gin_tsvector_ops”等)。 在两个模式中都存在与tsearch2运算符相关的'OPERATOR CLASS'语句。 尽管在两个模式中都找到了“ OPERATOR CLASS”语句,但所有添加的“ OPERATOR CLASS”语句之后都带有相同名称的“ OPERATOR CLASS”语句。

真正奇怪的是,当我使用新模式创建数据库时,使用pg_dump转储其模式,使用pg_restore将其还原到另一个数据库中,然后再次转储-显示“ OPERATOR FAMILY”语句! 我grep了contrib目录,但找不到任何“创建操作者家庭”语句。

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

为了回应您的评论,我猜想是PostgreSQL版本迁移引起的。 在7.2中,tsearch2是一个外部contrib模块,但在PostgreSQL 8.3中,它已集成到核心中。 因此,那些缺少的操作者族可能来自PostgreSQL 8.3的pg_catalog,而不是您自己的模式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM