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

Docker Compose中PostgreSQL Schema及表未创建问题求助

问题诊断与解决步骤

核心问题

PostgreSQL容器的初始化脚本默认在postgres系统数据库中执行,你创建了caillou数据库,但后续的Schema和表创建语句没有切换到该数据库,导致所有对象都被创建在postgres库中,而非目标caillou库。

解决方案

1. 修改db.sql脚本,切换到目标数据库执行后续语句

在创建caillou数据库之后,添加切换数据库的命令,确保后续Schema和表都创建在caillou中:

CREATE USER sa WITH PASSWORD 'admin';

CREATE DATABASE caillou;
GRANT CONNECT ON DATABASE caillou TO sa;

-- 关键:切换到caillou数据库
\connect caillou;

-- 后续的Schema和表创建语句...
CREATE SCHEMA IF NOT EXISTS app;
SET search_path TO pg_catalog,public,app;

ALTER SCHEMA app OWNER TO sa;
GRANT USAGE ON SCHEMA app TO sa;
-- 剩余脚本内容保持不变...

2. 清理已存在的数据卷(如果之前容器已启动过)

PostgreSQL容器会检测数据卷是否有初始化数据,如果已有数据,会跳过/docker-entrypoint-initdb.d/下的脚本执行。所以需要清理旧数据卷:

# 停止并删除容器及关联数据卷
docker-compose down -v
# 重新构建并启动容器
docker-compose up --build

3. 验证Adminer的连接配置

使用Adminer连接数据库时,确保:

  • 数据库名称填caillou
  • 用户名填sa,密码填admin
  • 主机地址填db(Docker Compose中定义的数据库服务名)

额外检查点

  • 查看数据库容器日志,确认初始化脚本是否执行成功:
docker-compose logs db

日志中若出现running /docker-entrypoint-initdb.d/db.sql字样,说明脚本已执行,可进一步查看是否有错误信息。

  • 确保db.sql文件权限正常,Docker COPY操作默认会赋予容器内postgres用户可读权限,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:17:05