我正在创建 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
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
的作用做出了假设)。