gpt4 book ai didi

postgresql - 如何将 NULL 值插入 UUID 而不是零

转载 作者:行者123 更新时间:2023-12-05 03:25:21 41 4
gpt4 key购买 nike

我在 postgres 中有一个表,其 UUID 字段类型必须是唯一的但可以为空

像这样的表格和模型

CREATE TABLE IF NOT EXISTS asdf(
id bigserial primary key,
name varchar(255) NOT NULL,
key uuid unique,
created_at timestamptz,
updated_at timestamptz
);

go 模型定义为

type Asdf struct {
ID uint64 `json:"id" gorm:"type:uuid;column:id"`
Name string `json:"name" gorm:"column:name"`
Key uuid.UUID `json:"key" gorm:"column:key"`
CreatedAt time.Time `json:"created_at" gorm:"column:created_at"`
UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"`
}

result := db.Connect().Create(asdf.Asdf{ID:123,Name:"这是名字"})

并向终端打印以下sql查询

INSERT INTO "asdf" ("id","name","key","created_at","updated_at")
VALUES('123','This is the name','00000000-0000-0000-0000-000000000000','2022-04-27 03:41:49.338','2022-04-27 03:41:49.338')

它使用 00000000-0000-0000-0000-000000000000 作为 key 值而不是 NULL 将模型插入到数据库中

我还注意到这种情况发生在字符串类型中,它插入了一个空字符串 '' 而不是 NULL

我如何让 gorm 插入 NULL 而不是零/空字符串作为值?

最佳答案

尝试将您的字段类型更改为指针类型:

type Asdf struct {
ID uint64 `json:"id" gorm:"type:uuid;column:id"`
Name string `json:"name" gorm:"column:name"`
Key *uuid.UUID `json:"key" gorm:"column:key"`
CreatedAt time.Time `json:"created_at" gorm:"column:created_at"`
UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"`
}

您显然也必须调整您的 go 代码(例如:检查 record.Key != nil,访问 *record.Key 而不是 record .Key 等...)


我认为 gorm 也尊重常规的 sql 接口(interface),所以你也可以尝试定义一个实现的自定义类型:

  • sql.Scannernull 转换为 "" on sql -> go conversions,
  • driver.Valuer (来自 sql/driver 包)将 "" 转为 null -> sql 转换。

虽然我还没有测试过,所以你必须自己尝试。

关于postgresql - 如何将 NULL 值插入 UUID 而不是零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72023281/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com