sql - 我需要在 Postgres JSONB 列中的对象字段中附加一组对象
问题描述
注意:我对 SQL 没有太多经验。
我有一个darf
有两列uid
的表forms
该forms
列是 postgres jsonb 类型。我将存储在uid
名称/电子邮件字符串中,在forms
列中我将 go 结构存储为 JSONB 类型
type Forms struct {
External []FormExternal
Internal []FormInternal
Download []FormDownloadPurchaseBU
Purchase []FormDownloadPurchaseBU
BU []FormDownloadPurchaseBU
}
利用这个功能
func (f Forms) Value() (driver.Value, error) {
return json.Marshal(f)
}
我使用这样的查询插入我的第一行
func (db DB) InitialInsertQuery(email string, forms form.Forms) {
initInsertQuery := "INSERT INTO darf (uid,forms) VALUES ($1, $2)"
_ , err := db.Conn.Exec(initInsertQuery, email, forms)
}
我现在在我的表中有一个条目,我想将一个对象/结构添加到
forms
列对象
中的 Arrays[] 之一{"External": null, "Internal": null, "Download": [{...}], "Internal": null, "BU": null, "Purchase": null, }
首先,当我初始化一个新用户时,我不希望其他字段为空......我将如何改变它?
其次,我的主要问题是如何在 jsonbforms
列对象字段中附加“下载”或任何数组?我显然想在 Go 中做到这一点。但是我有 PG Admin4 只是想先了解 SQL 查询本身,甚至做这样的事情。我发现了一些类似的东西
UPDATE darf SET darf.forms.Download = darf.forms.Download || '{...}' ::jsonb WHERE uid='useremail'
或者我也遇到了一些 jsonb_set(\something) 但是我也希望它在 Go 中并尝试传递一个表单以添加到 jsonb 对象中的一个数组中。
我最终试图做这样的事情
func (db DB) InsertOneFormQuery(email string, form form.FormDownloadPurchaseBU) {
initInsertQuery := "UPDATE darf APPEND darf.forms.Download VALUES ($1) WHERE uid=$2"
_ , err := db.Conn.Exec(initInsertQuery, form, email)
}
任何见解都会令人惊叹,甚至是文档或链接。
解决方案
推荐阅读
- xpages-ssjs - 在嵌套重复控件中使用 HashMap 基于键获取值
- c++ - 对图像应用透视 - 单应性
- javascript - 如何使用从客户端传递的参数
- python - 使用通配符 Python 查找复杂的子字符串
- python - 在 python 中分组,列具有 N/A 值
- api - 如何使用forecast.time.day?
- c++ - QT_HAS_BUILTIN 警告
- bash - Ubuntu脚本永无止境的循环
- php - 使用 INSERT 更新表时出错 ... ON DUPLICATE KEY UPDATE
- salesforce - 如果客户使用完全相同的电子邮件发送两次电子邮件,创建两个案例,我如何关闭第二个?