执行sqlc generate提示users表relation不存在的问题求助
问题解决:sqlc generate 报错 relation "users" does not exist
核心原因
sqlc 生成代码时需要读取数据表的 schema 定义才能解析查询语句,当前它无法找到 users 表的结构定义——要么是 schema 文件路径配置错误,要么是迁移文件没被 sqlc 正确识别。
解决步骤
方案一:将 goose 迁移文件移至 sqlc 指定的 schema 目录
- 调整目录结构,把
001_users.sql迁移文件放到 sqlc 配置的sql/schema目录下:project/ ├── sql/ │ ├── queries/ │ │ └── users.sql │ └── schema/ │ └── 001_users.sql ├── sqlc.yaml └── internal/ └── database/ - 重新执行
sqlc generate,sqlc 会自动解析 schema 目录下迁移文件中的表结构。
方案二:单独创建 schema 文件供 sqlc 读取
如果不想移动 goose 迁移文件,可在 sql/schema 目录下新建 users_schema.sql,直接写入表结构定义:
CREATE TABLE "users"( "id" UUID PRIMARY KEY, "created_at" TIMESTAMP NOT NULL, "updated_at" TIMESTAMP NOT NULL, "name" TEXT NOT NULL );
执行 sqlc generate 即可生成对应代码。
方案三:修改 sqlc.yaml 指向 goose 迁移目录
如果你的 goose 迁移文件存放在其他目录(比如 sql/migrations),直接修改 sqlc.yaml 的 schema 路径:
version: "2" sql: - engine: "postgresql" queries: "sql/queries" schema: "sql/migrations" # 改为你的 goose 迁移文件所在目录 gen: go: out: "internal/database" sql_package: "pgx/v5"
注意:sqlc 会解析迁移文件中 -- +goose UP 下方的表结构,确保该部分语句无语法错误。
你提到 post 表能正常生成代码,可对比 post 表的 schema 文件路径配置,就能找到 users 表的配置差异。
内容的提问来源于stack exchange,提问作者sakthi_lucia
相关产品推荐
相关产品推荐

