Postgresql:如何获取json,其中一列是键,另一列是值?
我有一张桌子如下。Postgresql:如何获取json,其中一列是键,另一列是值?,sql,json,postgresql,jsonb,postgresql-9.5,Sql,Json,Postgresql,Jsonb,Postgresql 9.5,我有一张桌子如下。repliesto是唯一的非空列,devicetokens是一个数组: CREATE TABLE devices( repliesto TEXT PRIMARY KEY CHECK (repliesto <> ''), devicetokens TEXT[] NOT NULL CHECK (ARRAY_LENGTH(device
repliesto
是唯一的非空列,devicetokens
是一个数组:
CREATE TABLE devices(
repliesto TEXT PRIMARY KEY CHECK (repliesto <> ''),
devicetokens TEXT[] NOT NULL
CHECK (ARRAY_LENGTH(devicetokens, 1) IS NOT NULL
AND ARRAY_LENGTH(devicetokens, 1) > 0)
);
答复
设备开关
用户1
{a}
用户2
{b,c}
在PostgreSQL v9.5+中有一个聚合函数 结果:
{ "user1" : ["a"], "user2" : ["b","c"] }
欢迎您在中试用(不再支持)Postgres 9.1没有任何JSON支持。如果您确实想使用JSON,则应升级到维护和支持的版本(例如12或13),然后再继续。基于SELECT jsonb_agg返回数据而非SQL语法错误的事实,PostgreSQL的版本必须为9.5+。sudoExclaimationExclaimation,请更新问题标签。请提供您正在使用的PostgreSQL版本。已更新标记。将在几个小时后重试并返回给您。这很有效。对于生成的JSON为空的情况,我必须添加
COALESCE
。所以:SELECT COALESCE(json_object_agg(repliesto,array_to_json(devicetokens)),“{}”)来自repliesto=ANY(“{”user1“,”user6“}”)的设备代码>
SELECT
json_object_agg(repliesto, array_to_json(devicetokens))
FROM
devices;
{ "user1" : ["a"], "user2" : ["b","c"] }