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

执行sqlc generate命令报错:‘relation users does not exist’

解决sqlc generate提示"relation 'users' does not exist"的问题

核心原因

sqlc默认依赖本地schema文件生成代码,而非直接读取数据库中已存在的表结构。哪怕数据库里已经有users表,只要sqlc没正确解析到本地的schema定义,就会抛出这个错误。

解决方案

1. 让sqlc直接连接数据库获取表结构

修改sqlc.yaml,添加db-url配置,让sqlc直接对接你的PostgreSQL数据库,跳过本地schema文件的解析环节:

version: "2"
sql:
  - schema: "sql/schema"
    queries: "sql/queries"
    engine: "postgresql"
    db-url: "postgres://你的用户名:密码@localhost/数据库名?sslmode=disable" # 替换为你的实际连接串
    gen:
      go:
        out: "internal/database"

重新执行sqlc generate,此时sqlc会直接从数据库拉取真实的users表结构,不会再依赖本地schema文件。

2. 确保sqlc正确读取本地schema文件

如果不想连接数据库,检查并调整以下配置:

  • 明确指定schema文件路径,确保覆盖所有迁移文件:
    schema: "sql/schema/*.sql"
    
  • 移除schema文件中的goose注释(-- +goose up/-- +goose down),避免干扰sqlc的解析逻辑,修改后的001_users.sql:
    CREATE TABLE users (
        id UUID PRIMARY KEY,
        created_at TIMESTAMP NOT NULL,
        updated_at TIMESTAMP NOT NULL ,
        name TEXT NOT NULL
    ); 
    
    DROP TABLE users;
    

3. 显式指定schema名称

在查询语句里加上public schema前缀,让sqlc直接定位到目标表:

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

或者在sqlc.yaml的Go生成配置中指定默认搜索路径:

gen:
  go:
    out: "internal/database"
    search_path: ["public"]

内容的提问来源于stack exchange,提问作者Nay Aung Lin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:22:11