用户.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;
这是我的 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 然后它生成的代码与我再次为用户所做的完全相同,但我收到错误。
发生这种情况的原因是因为“001_user.sql”和“users.sql”中的表名不匹配,一旦运行了goose migration up,或者,您之前没有运行“goose up”命令运行 sqlc 生成。为了避免这种情况,
goose postgres postgressql://<YourUserName>:<YourPassword>@<YourHostname>:5432/<YourDatabaseName> up
goose postgres postgressql://<YourUserName>:<YourPassword>@<YourHostname>:5432/<YourDatabaseName> down
,好的001_users.sql(10.9ms)
goose:已成功将数据库迁移到版本:1 5.运行sqlc生成:sqlc generate
注意:从您的迁移文件夹运行 goose 迁移命令。 PS:要检查您之前是否已应用迁移,请在第一步之前将第一步中给出的命令末尾的“up”替换为“status”。