内容提要
本文提出了改进PostgreSQL扩展文件组织和搜索路径的建议,以解决用户在不修改Postgres安装的情况下添加扩展的挑战。建议包括将扩展文件集中在一个目录中,并引入新配置参数,以简化安装和查找过程,从而提高扩展管理效率,特别是在容器和macOS环境中。
关键要点
-
提出改进PostgreSQL扩展文件组织和搜索路径的建议。
-
用户面临的挑战是需要在不修改Postgres安装的情况下添加扩展。
-
Debian系统中,创建扩展包的用户账户缺乏向Postgres安装添加文件的权限。
-
Christoph Berg的补丁通过添加第二个查找路径解决了扩展和动态模块的问题。
-
Peter Eisentraut提出的补丁提供了更典型的搜索路径模式,但未考虑与扩展一起提供的共享模块。
-
OCI镜像是不可变的,安装持久扩展需要创建持久卷并映射到特定目录。
-
CloudNativePg社区希望消除对持久卷的需求,依赖于每个扩展的单独镜像。
-
macOS的Postgres.app支持扩展,但安装扩展会破坏Apple的签名验证。
-
建议将扩展文件集中在一个目录中,以简化安装和查找过程。
-
引入新的pg_config参数以返回默认安装扩展的目录。
-
添加扩展查找路径GUC,列出Postgres将搜索的所有目录。
-
更新CREATE EXTENSION命令以在扩展路径中查找扩展控制文件。
-
更新PGXS的扩展安装行为以符合新的布局。
-
提出的文件布局和扩展路径GUC解决了打包测试和OCI/Kubernetes的用例。
-
为扩展模块预加载添加新的GUC,以便在会话中预加载共享模块。
-
未来考虑修改CREATE EXTENSION以支持仅包含共享模块的扩展。
-
RFC不包括如何管理第三方共享库的问题。
延伸解读
扩展管理的挑战与解决方案
PostgreSQL的扩展管理面临着用户在不修改安装内容的情况下添加扩展的挑战。为了解决这一问题,提出了新的扩展文件组织和查找路径的建议。这些改进旨在简化扩展的安装和查找过程,特别是在容器和macOS环境中,提升用户体验。
OCI与Kubernetes环境中的扩展管理
在OCI和Kubernetes环境中,扩展的持久性管理变得复杂。建议通过创建持久卷并将其映射到特定目录来解决这一问题。新的扩展路径GUC将帮助用户更方便地管理和查找扩展,减少配置复杂性。
macOS环境中的扩展安装问题
在macOS的Postgres.app中安装扩展可能会破坏Apple的签名验证,导致应用无法启动。为此,建议将扩展安装目录设置为应用包外的已知位置,以避免影响应用的完整性,同时确保扩展能够正常加载。
延伸问答
如何在不修改Postgres安装的情况下添加扩展?
可以通过集中扩展文件到一个目录并引入新的配置参数来简化安装和查找过程。
Debian系统中创建扩展包时遇到的挑战是什么?
用户账户缺乏向Postgres安装添加文件的权限,导致无法测试扩展。
CloudNativePg社区对扩展管理有什么新想法?
希望消除对持久卷的需求,依赖于每个扩展的单独镜像。
macOS的Postgres.app如何支持扩展?
支持扩展,但安装扩展会破坏Apple的签名验证。
RFC中提出的扩展文件布局是什么样的?
扩展文件将集中在一个目录中,包含控制文件、SQL、共享模块等子目录。
如何更新CREATE EXTENSION命令以支持新的扩展路径?
更新命令以在扩展路径中查找扩展控制文件,确保找到第一个匹配项。