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

GitHub Actions运行Hasura CI测试时migrate apply报数据库不存在错误

问题核心原因

报错database not found: error determining database kind for default, check if database exists on hasura和--database-name参数传值无关,你传入default是正确取值。触发报错的根本原因是运行中的Hasura实例没有注册名为default的数据库连接,CLI执行迁移操作时找不到对应目标库。

逐项修复方案
  • 补全Hasura服务健康检查
    当前配置里Postgres服务加了健康检查,但Hasura服务没有,GitHub Actions会在服务容器启动后立刻执行后续步骤,不会等待Hasura完成初始化流程,此时Hasura还没完成数据库连接注册,操作就会失败。给Hasura服务补充如下健康检查配置,原有env、ports配置保留即可:
hasura:
  image: hasura/graphql-engine:v2.6.2
  options: >-
    --health-cmd "wget --no-verbose --tries=1 --spider http://localhost:8080/healthz || exit 1"
    --health-interval 10s
    --health-timeout 5s
    --health-retries 10
  • 修正Hasura数据库连接环境变量
    v2.6.2版本的Hasura不会自动把元数据库注册为业务用的default库,你当前配置里的PG_DATABASE_URL是v1版本的废弃变量,v2版本不会识别。删除PG_DATABASE_URL配置,新增显式注册default数据库的环境变量:
    HASURA_GRAPHQL_DATABASES_DEFAULT_DATABASE_URL: postgres://postgres:postgrespassword@postgres:5432/postgres
  • 调整Hasura操作步骤顺序
    当前的执行顺序metadata apply -> migrate apply -> metadata reload不符合逻辑,干净启动的Hasura实例没有自定义元数据,如果本地元数据文件里没有包含default库的连接定义,先执行metadata apply会覆盖默认配置,导致default库丢失。调整步骤顺序为:
    • 校验Hasura服务连通性
    • 执行migrate apply --database-name default同步表结构
    • 执行metadata apply同步Hasura元数据
    • 执行metadata reload确认元数据生效
    • 执行seeds apply --database-name default导入种子数据
  • 增加前置连通性校验
    在所有Hasura操作步骤前增加校验步骤,排除偶发网络问题:
- name: Verify Hasura service status
  run: curl -f http://hasura:8080/healthz
排查校验手段

如果调整后仍然报错,在执行迁移命令前加一步调用Hasura元数据接口,查询当前已注册的数据库列表,确认default库是否存在:

curl -H "X-Hasura-Admin-Secret: super-secret" http://hasura:8080/v1/metadata \
  -d '{"type":"pg_get_sources","args":{}}'

正常返回的结果中会包含name为default、kind为postgres的数据库条目;如果返回为空,说明Hasura启动时的环境变量配置未生效,检查变量拼写、数据库连接地址格式是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:01:07