sqlc 生成错误“# package db sqldb\queries\user_data.sql:1:1: 关系“user_data”不存在”

问题描述 投票:0回答:1

用户.sql

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

sqlc.yaml

version: "2"
sql:
  - engine: "postgresql"
    queries: "sql/queries"
    schema: "sql/schema"
    gen:
      go:
        # package: "internal"
        out: "internal/database"
        sql_package: "pgx/v5"

001_users.sql

-- +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";

当我尝试生成时,出现这样的错误

$ sqlc generate
# package 
sql\queries\users.sql:1:1: relation "users" does not exist

有谁知道如何解决这个错误。

我尝试了一切,但还是没有来

但对于一些一两个表创建 sqlc 生成工作

-- name: GetPost :one
SELECT * FROM post
WHERE id = $1 LIMIT 1;

-- +goose Up
CREATE TABLE post (
    id int NOT NULL,
    title text,
    body text,
    PRIMARY KEY(id)
);

-- +goose Down
DROP TABLE post;

created sqlc generate for post

这是我的 sqlc.yaml

version: "2"
sql:
  - engine: "postgresql"
    queries: "sqldb/queries"
    schema: "sqldb/schema"
    gen:
      go:
        package: "db"
        out: "migrations"
        # sql_package: "pgx/v5"

我删除了sql文件夹并创建了一个名为rss和sqldb文件夹的新数据库,然后根据goose中的文档我得到了它并将其命名为001_post.sql并在查询中我将post.sql粘贴到文档中。

我再次尝试了 goose up 评论,然后在我的新数据库 RSS 中创建了新的帖子表。

然后我来到根文件夹,我运行了 sqlc generated 然后它生成的代码与我再次为用户所做的完全相同,但我收到错误。

postgresql go migration sqlc goose
1个回答
0
投票

发生这种情况的原因是因为“001_user.sql”和“users.sql”中的表名不匹配,一旦运行了goose migration up,或者,您之前没有运行“goose up”命令运行 sqlc 生成。为了避免这种情况,

  1. 如果您尚未运行 goose up 命令,请运行并跳过第二步,
    goose postgres postgressql://<YourUserName>:<YourPassword>@<YourHostname>:5432/<YourDatabaseName> up
  2. 如果您已经运行了 up 命令,请运行 goose down,然后运行 up 命令:
    goose postgres postgressql://<YourUserName>:<YourPassword>@<YourHostname>:5432/<YourDatabaseName> down
    ,
  3. 在您的情况下,数据库名称将是:“users”,如果您在本地运行 postgres,则主机名将是“localhost”。
  4. 收到类似以下消息后:

好的001_users.sql(10.9ms)
goose:已成功将数据库迁移到版本:1 5.运行sqlc生成:

sqlc generate

注意:从您的迁移文件夹运行 goose 迁移命令。 PS:要检查您之前是否已应用迁移,请在第一步之前将第一步中给出的命令末尾的“up”替换为“status”。

© www.soinside.com 2019 - 2024. All rights reserved.