使用 PostgreSQL 配置文件 postgresql.conf 的环境变量

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

我有一个自定义 DockerFile,它使用我们的软件所需的多个扩展来构建 PostgreSQL。下面是这个 DockerFile 的示例:

FROM postgres:15.4

# Update System
RUN apt-get update

WORKDIR /

#system preloaded libraries
RUN echo "shared_preload_libraries='pglogical,pg_cron'" >> /usr/share/postgresql/postgresql.conf.sample
#cron default database
RUN echo "cron.database_name=postgres" >> /usr/share/postgresql/postgresql.conf.sample

上面的“RUN”命令通过添加一些附加参数(如 cron.database_name=postgres)来修补 postgresql.conf.sample 文件,这些参数由 pg_cron 扩展使用来操作。

如果我想让这些参数查看变量,以便能够从 docker-compose 或 kubernetes ConfigMap 更改它,该怎么办?

例如我尝试了这个配置:

FROM postgres:15.4

# Update System
RUN apt-get update

WORKDIR /

#system preloaded libraries
RUN echo "shared_preload_libraries='pglogical,pg_cron'" >> /usr/share/postgresql/postgresql.conf.sample
#cron default database
RUN echo "cron.database_name=$CRON_DATABASE_NAME" >> /usr/share/postgresql/postgresql.conf.sample

上面的代码在 postgresql.conf 文件的末尾生成了这一行

cron.database_name=$CRON_DATABASE_NAME

而不是这一行

cron.database_name=postgres

但是 postgres 无法启动,因为它似乎无法将 $CRON_DATABASE_NAME 理解为变量

另一方面,似乎通过设置 WAL_LEVEL 环境变量就可以工作,而无需进入 postgresql.conf,而这个附加参数 cron.database_name 则不是这种情况

有什么想法吗?

postgresql docker variables config
1个回答
0
投票

我发现只有一些变量可以用作环境变量,这些变量是“postmaster”变量。这些变量在 postgresql 文档中被标记为“postmaster”。

environment:
   -pgdata=/var/lib/postgresql/data/pgdata
   -wal_level=logical

另一方面,要在 postgresql 启动时设置变量(无论是否为 postmaster),例如调整参数,我们可以使用以下代码,例如 docker compose 或 kubernetes stateful-set 中的参数。

args:
   -c cron.database_name=postgres
   -c min_wal_size=1GB
   -c max_wal_size=4GB

唯一的问题是我们需要重启postgres才能生效。

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