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

使用Docker Compose部署PostgreSQL时遭遇零长度分隔标识符错误的问题排查求助

问题分析

从你提供的错误日志能直接定位问题核心:

ALTER USER ""test"" WITH PASSWORD E'"test"';

PostgreSQL执行初始化SQL时,用户名被错误包裹了两层双引号(""test""),密码也被转义成带引号的形式(E'"test"'),这直接触发了zero-length delimited identifier语法错误——数据库解析时会把连续双引号识别为空标识符,进而报错。

这种情况本质是环境变量的值被意外添加了额外引号导致的,虽然你尝试了不同引号写法,但可能存在一些容易忽略的隐藏因素。

解决方案

我推荐按以下步骤排查修复:

  • 改用键值对格式定义环境变量
    把docker-compose.yml里的数组形式环境变量改成键值对格式,避免YAML解析时的潜在歧义:

    version: "3.8"
    services:
      db:
        image: postgres:14.1-alpine
        restart: always
        environment:
          POSTGRES_USER: test
          POSTGRES_PASSWORD: test
          POSTGRES_DB: test
        ports:
          - "5432:5432"
        volumes:
          - db:/var/lib/postgresql/data
    volumes:
      db:
        driver: local
    
  • 清除现有数据卷
    如果你之前尝试过启动服务,可能已经生成了包含错误初始化信息的数据卷,PostgreSQL会复用这些数据而非重新初始化。执行以下命令彻底清理:

    docker compose down -v
    

    之后再重新启动服务:

    docker compose up
    
  • 升级Docker Compose版本
    你当前使用的v2.10.2版本存在一些已知的环境变量解析小bug,建议升级到最新稳定版(比如v2.20+),能有效避免这类解析异常。

  • 检查文件格式细节
    确认你的docker-compose.yml文件没有使用制表符(YAML仅允许空格缩进),也没有隐藏的不可打印字符——可以用文本编辑器的"显示所有字符"功能再核对一遍。

验证

完成以上步骤后重新启动服务,应该能看到PostgreSQL正常初始化的日志,不会再出现语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:42:29