PostgreSQL 没有复制某些更改(扩展)
PostgreSQL is not replicating some changes(extensions)
我正在重现 this doc 使用 PostgreSQL 数据库服务器的主从复制。在集群前面有一个 pgpool 实例作为负载均衡器。到目前为止,一切都很好。
问题是当我从应用程序查询数据库并使用数据库中的特定函数时,这些函数使用 pg_trgm 或 pg_prewarm 等扩展名作为示例。每次查询与其中一个从站平衡时,我都会收到一个异常,告诉我我正在尝试使用的扩展丢失了。
Could not access file $libdir/pg_trgm
当我在主服务器上的每个数据库上使用 \dx
检查扩展列表时,我收到了完整的列表,但在从服务器上它只是弹出 plpgsql。
由于从服务器是只读服务器,我无法在那里创建扩展。
有没有办法将扩展创建复制到从服务器?
提前致谢!
您忘记在备用计算机上安装“contrib”PostgreSQL 软件包。因此,无法创建扩展。
从服务器认为扩展已安装(因为对它的引用与主目录的其余部分一起复制到它),但是当它加载扩展的主要内容时,它实际上并没有安装在那里。
您需要将构成扩展的二进制对象安装到副本服务器上。如何执行此操作取决于开始时如何在这些服务器上安装软件。
When I check the extension list with \dx on every database on master I receive the full list but on slaves it just pop plpgsql.
根据您的描述,这不可能。如果副本是由 pg_basebackup 创建的主副本,那么 \dx 应该 return 在主副本上得到相同的结果。 \dx 只是检查系统目录以查看它认为已安装的内容。如果底层二进制文件丢失,它不在乎,它无论如何都会报告。如果您得到不同的结果,那么您没有连接到您认为的实例。
我正在重现 this doc 使用 PostgreSQL 数据库服务器的主从复制。在集群前面有一个 pgpool 实例作为负载均衡器。到目前为止,一切都很好。
问题是当我从应用程序查询数据库并使用数据库中的特定函数时,这些函数使用 pg_trgm 或 pg_prewarm 等扩展名作为示例。每次查询与其中一个从站平衡时,我都会收到一个异常,告诉我我正在尝试使用的扩展丢失了。
Could not access file $libdir/pg_trgm
当我在主服务器上的每个数据库上使用 \dx
检查扩展列表时,我收到了完整的列表,但在从服务器上它只是弹出 plpgsql。
由于从服务器是只读服务器,我无法在那里创建扩展。
有没有办法将扩展创建复制到从服务器?
提前致谢!
您忘记在备用计算机上安装“contrib”PostgreSQL 软件包。因此,无法创建扩展。
从服务器认为扩展已安装(因为对它的引用与主目录的其余部分一起复制到它),但是当它加载扩展的主要内容时,它实际上并没有安装在那里。
您需要将构成扩展的二进制对象安装到副本服务器上。如何执行此操作取决于开始时如何在这些服务器上安装软件。
When I check the extension list with \dx on every database on master I receive the full list but on slaves it just pop plpgsql.
根据您的描述,这不可能。如果副本是由 pg_basebackup 创建的主副本,那么 \dx 应该 return 在主副本上得到相同的结果。 \dx 只是检查系统目录以查看它认为已安装的内容。如果底层二进制文件丢失,它不在乎,它无论如何都会报告。如果您得到不同的结果,那么您没有连接到您认为的实例。