PostgreSQL不复制某些更改(扩展名)

问题描述 投票:0回答:2

我在this doc之后复制PostgreSQL DB服务器的主从复制。集群前面有一个pgpool实例作为负载均衡器。到现在为止还挺好。

问题是,当我从应用程序查询数据库并使用数据库中的特定功能时,这些功能使用了pg_trgm或pg_prewarm之类的一些扩展作为示例。每次查询平衡到一个从属服务器时,我都会收到一个异常,告诉我我要使用的扩展名丢失。

Could not access file $libdir/pg_trgm

当我在master上的每个数据库上用\dx检查扩展列表时,我会收到完整列表,但在slave上,它会弹出plpgsql。

由于从属服务器是只读服务器,因此我无法在其中创建扩展。

是否可以将扩展创建复制到从属服务器?

提前感谢!

postgresql database-replication
2个回答
0
投票

您忘记在备用计算机上安装“ contrib” PostgreSQL软件包。因此,无法创建扩展。


0
投票

从属服务器认为扩展已安装(因为对它的引用已与主目录的其余部分一起复制到了该扩展),但是当它要加载扩展的内容时,实际上并没有。

您需要将构成扩展的二进制对象安装到副本服务器上。具体操作方式取决于您是如何在这些服务器上安装软件的。

当在主服务器上的每个数据库上用\ dx检查扩展列表时,我会收到完整列表,但在从属服务器上,它会弹出plpgsql。

根据您的描述,这是不可能的。如果副本是pg_basebackup创建的主副本,则\ dx应该在主副本和副本上返回相同的结果。 \ dx只是检查系统目录以查看其认为已安装。如果基础二进制文件丢失,则不在乎,它仍会报告它。如果得到不同的结果,则说明您没有连接到您认为的实例。

© www.soinside.com 2019 - 2024. All rights reserved.