“错误”:“无法创建用户:错误:关系\“用户\”违反非空约束

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

我正在创建 rssagg 应用程序

这是我遇到的错误

{
  "error": "Couldn't create User: ERROR: null value in column \"id\" of relation \"users\" violates not-null constraint (SQLSTATE 23502)"
}

这是我的处理程序用户 go 函数

    userUUID := uuid.New()
    generatedType := pgtype.UUID{Bytes: userUUID}
    log.Println("user uuid", userUUID)
    log.Println("user generated type", generatedType)
    user, err := apiCfg.DB.CreateUser(r.Context(), internal.CreateUserParams{
        ID:        generatedType,
        CreatedAt: pgtype.Timestamp{Time: time.Now()},
        UpdatedAt: pgtype.Timestamp{Time: time.Now()},
        Name:      params.Name,
    })

这是我在运行服务器时得到的日志:

2024/04/11 00:56:22 user uuid 18bd07ce-a47d-484a-b2d3-1b1fb8d2bf9e
2024/04/11 00:56:22 user generated type {[24 189 7 206 164 125 72 74 178 211 27 31 184 210 191 158] false}

我希望创建一个用户,但 uuid 是以字节形式出现的

uuid 正在生成,但我无法将它们设置为 postgres id

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

pgtype.UUID
定义为(假设您使用的是 PGX v5):

type UUID struct {
    Bytes [16]byte
    Valid bool
}

因此,当您使用

pgtype.UUID{Bytes: userUUID}
进行分配时,
Valid
的值将是默认值 (
false
)。 PGX 类型 的工作方式与
sql
包 Null 类型相同(例如
NullBool
);也就是说,如果
Valid
为 false,则该值在发送到数据库时将被视为 NULL。

要解决此问题:

generatedType := pgtype.UUID{Bytes: userUUID, Valid: true}

您需要使用类似的方法

pgtype.Timestamp

注意:这是基于您提供的信息(我对

apiCfg.DB.CreateUser
的作用做出了假设)。

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