我有一个表:如何使字段默认值分配给jsonb字段?
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
。
我想要messagetype
要的a
或b
一个enum
值,反映了有效载荷的内容。
是否正常化JSON数据在Postgres中是正确的做法,还是我会更好地设置某种形式的数据视图?
为什么你需要'有效载荷'字段?它可以在查询时建立。 –
道歉,我没有解释清楚。有效负载通常包含一个* complex * JSON对象,其中只有一个顶级属性,并且包含一个“messageid”。我想从JSON中挑选几个有用的数据,以使查询更简单,更快捷。 – fadedbee
如果数据结构化,请不要保留有效负载。使用正确的数据类型来创建所有字段。如果数据不是结构化的,我的意思是,如果你事先不知道它的结构,JSON只在数据库中有用。 –