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

Flyway迁移成功但PostgreSQL执行\dt无关系表的问题求助

问题1:Flyway挂载路径配置错误,未正确读取迁移脚本

你的文件结构中迁移脚本存放在migration/sql/V1__transaction_events.sql,但Docker Compose中Flyway的挂载配置为./migration:/flyway/sql,这会导致脚本实际位于容器内的/flyway/sql/sql/路径下,Flyway默认不会递归扫描子目录,因此没有执行任何迁移,所谓的「校验成功」其实是无迁移脚本时的空成功提示。
修复方案:修改docker-compose.yml中Flyway的volumes配置为:

volumes:
  - ./migration/sql:/flyway/sql

问题2:查询时未指定schema

你在Flyway配置中指定了-schemas=wallet,迁移脚本也将表建在wallet schema下,PostgreSQL默认执行\dt仅查询public schema下的表,自然看不到结果。Flyway默认会自动创建指定的schema,无需额外手动创建。
修复方案:
查询表时执行\dt wallet.*即可查看对应schema下的表,也可以执行SET search_path TO wallet, public;修改当前会话的默认搜索路径,后续直接执行\dt就能看到wallet schema下的表。

问题3:数据库Dockerfile配置冗余且路径错误

你的utils/db.Dockerfile中写了COPY ../init.sql /docker-entrypoint-initdb.d/,Docker构建时上下文默认是docker-compose.yml所在的根目录,../会超出上下文范围导致复制失败,init.sql根本不会生效。同时你已经在docker-compose.yml的db服务环境变量中指定了POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB,PostgreSQL官方镜像会自动创建对应的用户和数据库,完全不需要额外的init.sql和自定义Dockerfile重复配置。
修复方案:
删除utils/db.Dockerfile和init.sql,直接使用官方postgres镜像即可,修改docker-compose.yml的db服务配置,去掉冗余的build段:

db:
  container_name: postgres-db
  environment:
    POSTGRES_PASSWORD: testuser1234
    POSTGRES_USER: test_user
    POSTGRES_DB: wallet
  image: postgres:13
  ports:
    - "5432:5432"
  restart: always

验证步骤

  1. 执行docker compose down -v删除之前的存量卷,避免旧的错误数据库数据残留
  2. 执行docker compose up --build重新启动所有服务,查看flyway容器日志可以看到Successfully applied 1 migration的提示,代表迁移执行成功
  3. 登录数据库执行\dt wallet.*即可看到创建的transaction_events表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:27:00