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

Docker Compose中PostgreSQL初始化脚本未执行问题排查

问题分析与解决:PostgreSQL uuid-ossp扩展未生效导致uuid_generate_v4()不存在错误

问题原因

从日志关键信息可定位两个核心问题:

  1. 初始化脚本未执行:日志显示PostgreSQL Database directory appears to contain a database; Skipping initialization,说明postgres_data数据卷已存在旧数据,PostgreSQL跳过了初始化流程,docker-entrypoint-initdb.d下的扩展安装脚本根本没运行。
  2. 扩展可能未在目标数据库创建:即使脚本执行,如果SQL未指定应用使用的数据库,扩展默认会创建在postgres库中,但你的应用可能连接的是另一个自定义数据库。

解决步骤

1. 清理旧数据卷,重新触发初始化

PostgreSQL的初始化脚本仅在首次创建数据库时执行,需先删除现有数据卷:

docker-compose down -v

重新启动容器,此时PostgreSQL会重新初始化并执行扩展脚本:

docker-compose up -d

2. 修正初始化脚本(可选但推荐)

确保扩展在应用使用的目标数据库中创建,修改pg_init_scripts/extension.sql:

-- 替换为你的应用数据库名称(对应.env里的POSTGRES_DB)
\c your_app_database;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;

这样可确保扩展安装在应用实际连接的数据库中,且函数位于public schema下(应用默认会查找这个schema)。

3. 验证扩展安装

容器启动后,进入容器验证扩展是否生效:

docker exec -it postgres psql -U your_db_user -d your_app_database

执行以下SQL测试:

SELECT uuid_generate_v4();

如果返回类似a1b2c3d4-1234-5678-90ab-cdef01234567的UUID,说明扩展安装成功。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:45:47