postgresql 在postgres更新jsonb列时,如何在一个查询中创建或追加数组?

ubby3x7f  于 2023-03-01  发布在  PostgreSQL
关注(0)|答案(1)|浏览(126)

我有一个包含一些基本jsonb的表,在本例中,我们将其称为事务

CREATE TABLE transactions (
    transaction_id text NOT NULL,
    body jsonb,
);

在主体内部,我们可以忽略一些数据,但它是一个类似于{" price ":10}等
我想添加一个refund键,并将其默认为一个空数组,或者在一个查询中推入该数组。
下面的代码通过两个查询来完成:
x一个一个一个一个x一个一个二个x
但是如果数组不存在于单个事务/查询中,我似乎无法示例化它。当然,也尝试了postgres jsonb文档。
先谢了!

lf5gs5x2

lf5gs5x21#

但是,如果在创建表时,使用空列表设置默认键“refunds”,会怎么样呢?

CREATE TABLE transactions (
    transaction_id text NOT NULL,
    body jsonb NOT NULL DEFAULT '{"refunds":[]}'::jsonb
);

做一个记录“transaction_id”。

INSERT INTO "transactions" ("transaction_id") VALUES ('abc');

产出

transaction_id |      body
----------------+-----------------
 abc            | {"refunds": []}

更新

UPDATE transactions 
SET body = jsonb_set(body, '{refunds}', '[{"id":"any"}]'::jsonb, true)
WHERE transaction_id = 'abc';

相关问题