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

Ecto关联同一类对象:创建Game时提示team_a_id列不存在

问题解决:Postgrex提示team_a_id列不存在但实际存在

可能原因及解决步骤

1. 强制重新编译代码

Ecto会缓存Schema定义,若修改Schema或迁移后未重新编译,可能导致Ecto无法识别新增列。执行以下命令强制编译:

mix compile --force

之后重启应用服务器(如mix phx.server)。

2. 验证迁移执行状态

再次确认CreateGames迁移是否已正确执行:

mix ecto.migrations

若迁移状态为down,执行迁移命令:

mix ecto.migrate

3. 检查create_game函数实现

确认MyApp.Store.create_game/1是否正确使用了Game.changeset。如果函数内部手动构造Changeset时遗漏了team_a_id和team_b_id,会导致插入错误。正确的实现示例:

def create_game(attrs) do
  %Game{}
  |> Game.changeset(attrs)
  |> Repo.insert()
end

4. 确认数据库连接配置

检查应用配置文件(如config/dev.exs),确保Repo连接的是你查询的tourney_dev数据库,避免连接到其他环境(如test库)。

5. 检查表结构细节

在psql中执行\d games查看完整表结构,确认team_a_id和team_b_id的列名、类型完全正确,无拼写或大小写问题(PostgreSQL对大小写敏感,若迁移中用引号包裹列名会导致大小写混合,但你的迁移未使用引号,此问题概率较低)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:24:27