如何在sqlc golang中将文本类型从pgtype.Text更改为字符串?

May*_*kar 8 go sqlc

我有给定查询的生成代码

INSERT INTO "users" (
    username,
    name,
    surname,
    email,
    hashed_password,
    role
) VALUES (
    $1, $2, $3, $4, $5, $6
) RETURNING "id", "username";
Run Code Online (Sandbox Code Playgroud)

看起来像这样

type CreateUserParams struct {
    Username       string      `json:"username"`
    Name           pgtype.Text `json:"name"`
    Surname        pgtype.Text `json:"surname"`
    Email          string      `json:"email"`
    HashedPassword string      `json:"hashed_password"`
    Role           UserRole    `json:"role"`
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能变成Name pgtype.Textgolang字符串?目前我的sqlc.yaml文件如下所示

INSERT INTO "users" (
    username,
    name,
    surname,
    email,
    hashed_password,
    role
) VALUES (
    $1, $2, $3, $4, $5, $6
) RETURNING "id", "username";
Run Code Online (Sandbox Code Playgroud)

我的架构如下所示

type CreateUserParams struct {
    Username       string      `json:"username"`
    Name           pgtype.Text `json:"name"`
    Surname        pgtype.Text `json:"surname"`
    Email          string      `json:"email"`
    HashedPassword string      `json:"hashed_password"`
    Role           UserRole    `json:"role"`
}
Run Code Online (Sandbox Code Playgroud)

这里namesurname可以NULL基于模式。现在正如 @kozmo 指出的那样,因为这些列可以为空,所以它正在生成pgtype.Text而不是string. 但我想在每个场景中创建字符串。我怎样才能做到这一点?

koz*_*zmo 1

我猜,你的“用户”模式文件看起来像

create table users
(
    id              uuid,
    username        text,
    name            text,
);
Run Code Online (Sandbox Code Playgroud)

Asqlc generate

type User struct {
    ID       pgtype.UUID `json:"id"`
    Username pgtype.Text `json:"username"`
    Name     pgtype.Text `json:"name"`
}
Run Code Online (Sandbox Code Playgroud)

如果添加约束not null

create table users
(
    id              uuid,
    username        text,
    name            text not null --- 
);
Run Code Online (Sandbox Code Playgroud)

生成的代码看起来像

type User struct {
    ID       pgtype.UUID `json:"id"`
    Username pgtype.Text `json:"username"`
    Name     string      `json:"name"`
}
Run Code Online (Sandbox Code Playgroud)