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

执行sqlc generate命令时提示relation "users"不存在,寻求解决方法

执行sqlc generate时报错:relation "users" does not exist

错误信息

PS C:\Users\%USERNAME%\Documents\project_1> sqlc generate
# package 
sql\queries\users.sql:1:1: relation "users" does not exist

文件结构说明

项目根目录下包含:

  • sql文件夹,内部分为schema和queries两个子文件夹
    • sql/schema:存放数据库表结构定义文件
    • sql/queries:存放SQL查询语句文件(如users.sql)
  • 根目录下的sqlc.yaml配置文件

数据库Schema文件内容

-- +goose up

CREATE TABLE users (
     id UUID PRIMARY KEY,
     created_at TIMESTAMP NOT NULL,
     updated_at TIMESTAMP NOT NULL,
     name TEXT NOT NULL
);

-- +goose down

DROP TABLE USERS;

SQL查询语句文件内容

-- name: CreateUser :one
INSERT INTO users (id, created_at, updated_at, name)
VALUES ($1, $2, $3, $4)
RETURNING *;

sqlc配置文件内容

version: "2"
sql:
  - schema: "sql/schema"
    queries: "sql/queries"
    engine: "postgresql"
    gen:
      go:
        out: "internal/database"

已尝试的操作

  • 修改文件及文件夹结构
  • 重命名文件和查询语句
  • 查找类似问题

期望结果

  • 终端无错误输出
  • 生成包含database子文件夹及对应Go代码的internal文件夹

解决方法

问题核心是sqlc无法识别带有Goose注释的表结构定义,导致它找不到users表的创建语句。可以用以下两种方式解决:

方法1:调整Schema文件格式

直接移除Schema文件中的-- +goose up和-- +goose down注释,让sqlc能直接读取到CREATE TABLE语句:

CREATE TABLE users (
     id UUID PRIMARY KEY,
     created_at TIMESTAMP NOT NULL,
     updated_at TIMESTAMP NOT NULL,
     name TEXT NOT NULL
);

方法2:在sqlc配置中启用Goose支持

如果需要保留Goose注释,在sqlc.yaml中添加schema_loader配置,让sqlc解析Goose格式的Schema:

version: "2"
sql:
  - schema: "sql/schema"
    queries: "sql/queries"
    engine: "postgresql"
    schema_loader:
      goose: true
    gen:
      go:
        out: "internal/database"

额外检查项:

  • 确保sql/schema下的文件都是.sql后缀,sqlc只会处理该后缀的文件
  • 确认配置中的路径sql/schema和sql/queries是相对于项目根目录的正确路径,没有拼写错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:50:15