PIGSTY

配置

预加载扩展并配置扩展参数

虽然大多数用 SQL 编写的 PostgreSQL 扩展可以使用 CREATE EXTENSION 直接启用,但一些使用特殊 postgres 钩子的扩展在使用前需要额外的步骤来预加载它们。


预加载

大多数扩展都有一个或多个对应的动态库(.so.dylib.dll),其中一些在使用前需要预加载。 尝试在没有正确预加载的情况下 CREATE 这些扩展将导致错误。 错误配置的预加载库可能导致数据库重启/启动失败。

一些扩展可以在没有预加载的情况下部分工作,这意味着扩展功能的一部分可以直接使用,其余功能在预加载后可用。

要预加载扩展,将其添加到 shared_preload_libraries 并重启数据库服务器。 扩展目录 提供了需要动态预加载的扩展的完整列表。


配置

要在新 postgres 集群上配置预加载,可以使用 pg_libs 参数。 它将在 postgres 集群引导期间填充到 shared_preload_libraries 参数中。

示例:设置 Supabase 扩展预加载

此示例展示如何使用 pg_libs 参数指定预加载的扩展。

all:
  children:
    pg-meta:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-meta
        pg_libs: 'timescaledb, plpgsql, plpgsql_check, pg_cron, pg_net, pg_stat_statements, auto_explain, pg_tle, plan_filter'

shared_preload_libraries 是一个以逗号分隔的扩展列表。

请注意,这仅在集群创建之前有效。之后, 您必须配置集群来更改现有集群上的 shared_preload_libraries 参数。(使用 patronictlALTER SYSTEM 等...)

将 timescaledb 添加到 shared_preload_libraries
pg edit-config pg-meta --force -p shared_preload_libraries='timescaledb, pg_stat_statements, auto_explain'
pg restart pg-meta    # 重启以应用更改

如果您想手动配置预加载,您可以自己更改 postgresql.conf


默认值

pg_libs 的默认值是 pg_stat_statements, auto_explain, 它默认预加载这两个 Contrib 扩展,这两个扩展提供基本的可观测性:


注意事项

预加载库是逐个加载的,因此 shared_preload_libraries 中扩展的顺序很重要, 以下是一些需要遵循的已知规则:

  • 对于 STAT 扩展,在 pg_stat_statements 之后添加它们以确保使用相同的 query_id。
  • timescaledbcitus 应该放在 shared_preload_libraries开头
  • 如果您同时使用 citustimescaledb,请将 citus 放在 timescaledb 之前。
  • 对于 documentdb,使用 pg_documentdbpg_documentdb_core 作为库名称。
  • pg_search 在 PostgreSQL 17 及更高版本中不需要预加载,但早期版本需要。

参数

一些扩展有可配置的参数,您可以在不同的地方管理它们。

有关详细信息,请查阅每个扩展的官方文档。