gpt4 book ai didi

json - postgres 中的部分更新 json 字段

转载 作者:行者123 更新时间:2023-11-29 11:32:21 36 4
gpt4 key购买 nike

在 Postgres 中我有一个这样的表:

CREATE TABLE storehouse
(
user_id bigint NOT NULL,
capacity integer NOT NULL,
storehouse json NOT NULL,
last_modified timestamp without time zone NOT NULL,
CONSTRAINT storehouse_pkey PRIMARY KEY (user_id)
)

storehouse.storehouse 正在存储这样的数据:

{
"slots":[
{
"slot" : 1,
"id" : 938
},
{
"slot" : 2,
"id" : 127
},
]
}

问题是,我想更新 storehouse.storehouse.slots[2],但我不知道该怎么做。

我知道如何改变整个storehouse.storehouse字段,但我想知道既然Postgres支持json类型,它应该支持部分修改,否则就不行json 类型和text 类型的区别。 (我知道 json 类型也有类型验证,这与 text 不同)

最佳答案

目前不支持 JSON 索引和部分更新。 PostgreSQL 9.2 中的 JSON 支持是基本的,仅限于验证 JSON 以及将行和数组转换为 JSON。在内部,json 实际上只是文本

正在进行部分更新、索引等增强功能的工作。无论如何,当 JSON 值的一部分发生变化时,PostgreSQL 将无法避免重写整行,因为这是 MVCC 模型固有的并发。使之成为可能的唯一方法是将 JSON 值拆分为侧关系中的多个元组,例如 TOAST 表 - 这是可能的,但可能表现不佳,目前还远未被考虑。

正如 Chris Travers 指出的那样,您可以使用 PL/V8 函数或其他支持 json 的语言(如 Perl 或 Python)中的函数来提取值,然后在这些函数上创建表达式索引。

关于json - postgres 中的部分更新 json 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14207068/

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