基于 PostgreSQL Docker Hub 官方镜像 构建的增强版 PostgreSQL 镜像,内置经过验证的扩展组合。
支持 PostgreSQL 14.24、15.19、16.15、17.11 和 18.6。所有 tag 均支持 linux/amd64 与 linux/arm64。
下表为执行 CREATE EXTENSION 后,在数据库 pg_extension 中报告的版本:
| PostgreSQL | TimescaleDB | pg_cron | pgAudit | repmgr |
|---|---|---|---|---|
| 14.24 | 2.19.3 | 1.6 | 1.6.3 | 5.5 |
| 15.19 | 2.28.3 | 1.6 | 1.7.1 | 5.5 |
| 16.15 | 2.30.0 | 1.6 | 16.1 | 5.5 |
| 17.11 | 2.30.0 | 1.6 | 17.1 | 5.5 |
| 18.6 | 2.30.0 | 1.6 | 18.0 | 5.5 |
pg_cron 安装的 PGDG Debian 包版本为 1.6.8-1.pgdg13+1,但扩展对数据库报告的版本为 1.6。
启动 PostgreSQL 18:
docker run -d \
--name postgres-stack \
-e POSTGRES_PASSWORD=change-me \
-e POSTGRES_DB=app \
-p 5432:5432 \
-v postgres_data:/var/lib/postgresql \
buall/postgres-stack:18.6 \
-c shared_preload_libraries=timescaledb,pg_cron,pgaudit \
-c cron.database_name=app \
-c pgaudit.log='write, ddl'
首次启动后创建扩展:
docker exec -i postgres-stack \
psql -U postgres -d app <<'SQL'
CREATE EXTENSION IF NOT EXISTS timescaledb;
CREATE EXTENSION IF NOT EXISTS pg_cron;
CREATE EXTENSION IF NOT EXISTS pgaudit;
CREATE EXTENSION IF NOT EXISTS repmgr;
SQL
pg_cron只能在一个数据库中创建;cron.database_name必须与创建pg_cron扩展的数据库一致。
可在镜像名之后使用 PostgreSQL 原生 -c 参数配置服务端。POSTGRES_* 环境变量仅
用于首次初始化空数据目录,不能替代 postgresql.conf;POSTGRESQL_MAX_CONNECTIONS
是 Bitnami 变量,对此镜像无效。
docker run -d \
--name postgres-configured \
-e POSTGRES_PASSWORD=change-me \
-e POSTGRES_DB=app \
-p 5432:5432 \
-v postgres_data:/var/lib/postgresql \
buall/postgres-stack:18.6 \
-c max_connections=300 \
-c shared_buffers=1GB \
-c wal_level=logical \
-c max_replication_slots=20 \
-c max_wal_senders=20
大量参数建议挂载 postgresql.conf,并追加
-c config_file=/etc/postgresql/postgresql.conf。max_connections、
shared_buffers、逻辑复制参数和 shared_preload_libraries 都需要重启才会生效。
完整参数请参阅 PostgreSQL 完整官方手册
和 服务端配置参数索引;
将 URL 中的 current 替换为镜像大版本号,例如 18。
PostgreSQL 18 应将数据卷挂载到 /var/lib/postgresql;PostgreSQL 14 至 17 则应
挂载到 /var/lib/postgresql/data。
Chart 默认使用 docker.io/buall/postgres-stack:18.6,因此使用此镜像时不需要
配置 image。先添加公开 Chart 仓库,并在目标 namespace 创建凭据 Secret:
helm repo add buall-charts https://buall.github.io/buall-charts
helm repo update
kubectl create namespace postgresql
kubectl -n postgresql create secret generic postgresql-auth \
--from-literal=username=postgres \
--from-literal=password='change-me' \
--from-literal=database=app
创建 values.yaml,启用所需扩展及审计配置:
auth:
existingSecret: postgresql-auth
postgresql:
extensions:
- timescaledb
- pg_cron
- pgaudit
- repmgr
# Helm cannot read an existing Secret during rendering, so set this explicitly.
cronDatabaseName: app
configuration: |-
pgaudit.log = 'write, ddl'
部署或升级时使用同一个 Helm release:
helm upgrade --install postgresql buall-charts/postgresql \
--namespace postgresql \
--values values.yaml
Chart 会在空数据目录的首次初始化时自动创建扩展,并自动配置 TimescaleDB、pg_cron
和 pgAudit 所需的 shared_preload_libraries。使用 existing Secret 时,Helm 无法在
渲染时读取其中的数据库名;因此本例显式将 cronDatabaseName 设为 app。已有 PVC
不会重新执行扩展初始化脚本,因此应在首次部署前确定扩展列表。
后续升级先更新仓库索引,再执行同一条 helm upgrade 命令:
helm repo update
helm upgrade postgresql buall-charts/postgresql \
--namespace postgresql \
--values values.yaml
pgaudit.log 审计策略。Content type
Image
Digest
sha256:dfc2d128c…
Size
231.4 MB
Last updated
about 1 month ago
docker pull buall/postgres-stack:15.19-ts2.18.2