gpt4 book ai didi

postgresql - 如何使字段默认为分配给 jsonb 字段的值?

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

我有一张 table :

CREATE TABLE inbound ( -- broadcasts received from RTs
id SERIAL primary key,
ts TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
rt VARCHAR(10) NOT NULL,
region region NOT NULL,
channel channel NOT NULL,
payload jsonb,
messageid, -- denormalised
messagetype -- denormalised
);

有效负载可能是:{"a":{"messageid":"ABC123"}}{"b":{"messageid":"ABC123"}}.

我希望 messageid 字段始终包含负载对象的 messageid 字段的值,无论它是 a 还是b.

我希望messagetypeabenum 值,以反射(reflect)内容的有效载荷。

在 Postgres 中对 JSON 数据进行反规范化是正确的做法,还是我最好为数据设置某种形式的 View ?

最佳答案

不要保留负载。将字段保存在。假设此架构:

create type messagetype as enum('a','b');
create table inbound (
messageid text,
messagetype messagetype
)

当接收到负载时:

with p (payload) as ( values
('{"a":{"messageid":"ABC123"}}'::jsonb),
('{"b":{"messageid":"ABC123"}}')
)
insert into inbound (messagetype, messageid)
select key::messagetype, value ->> 'messageid'
from p, jsonb_each(payload)

在请求时:

select jsonb_build_object(messagetype, jsonb_build_object('messageid', messageid))
from inbound
;
jsonb_build_object
--------------------------------
{"a": {"messageid": "ABC123"}}
{"b": {"messageid": "ABC123"}}

关于postgresql - 如何使字段默认为分配给 jsonb 字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45240864/

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