Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql:如何获取json,其中一列是键,另一列是值?_Sql_Json_Postgresql_Jsonb_Postgresql 9.5 - Fatal编程技术网

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"] }