You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过docker-compose设置PostgreSQL的locale为en_GB?

问题根因

配置不生效主要有两个核心原因:

  1. PostgreSQL的默认locale配置仅在数据库集群首次初始化时生效,你本地已挂载的pg-data持久卷保留了首次初始化时的默认en_US配置,后续修改镜像、环境变量都不会覆盖旧集群的配置
  2. 仅设置LANG环境变量不会覆盖PostgreSQL专门用于货币格式的lc_monetary参数,money类型的显示逻辑由该参数单独控制

修复步骤

方式一:重新初始化数据库集群(适用于还没有业务数据的场景)

  • 先停止运行的容器并清空旧持久卷(执行前请确认已有数据可清除,有需要先备份数据)
docker compose down -v
  • 你当前的Dockerfile无需修改,已经可以正确生成en_GB.UTF-8 locale
  • 修改docker-compose.yml中db服务的environment配置,新增初始化参数:
environment:
  POSTGRES_USER: ${POSTGRES_USER}
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  POSTGRES_DB: ${POSTGRES_DB}
  PGDATA: ${PGDATA}
  LANG: 'en_GB.UTF-8'
  # 初始化数据库集群时指定全局locale和货币格式
  POSTGRES_INITDB_ARGS: "--locale=en_GB.UTF-8 --lc-monetary=en_GB.UTF-8"
  • 重新构建并启动容器
docker compose up --build -d
  • 验证配置生效:连接到PostgreSQL执行以下SQL,返回en_GB.UTF-8即配置正确
show lc_monetary;

方式二:修改已有集群配置(适用于已有业务数据不能清空的场景)

不需要修改镜像和docker-compose配置,直接连接到PostgreSQL执行以下SQL修改全局参数,之后重启数据库服务即可生效:

ALTER SYSTEM SET lc_monetary = 'en_GB.UTF-8';

该配置修改后仅对新建立的连接生效,不会修改已存储的money类型字段的数值,仅修改其显示格式。


内容的提问来源于stack exchange,提问作者Robert Jamborski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:15:03