Postgres的集群(西特斯):范围查询对嵌套jsonb柱
问题描述:
我使用配置为群集postgres的9.5.4使用西特斯5.2Postgres的集群(西特斯):范围查询对嵌套jsonb柱
使用下面的命令表已分片。
SELECT master_create_distributed_table('mytest', 'id', 'hash');
SELECT master_create_worker_shards('mytest', 16, 1);
从下面存储在jsonb列样品JSON数据,我想搜索记录匹配的
o['mid'] > 7000
这是一个用户的记录的样本。将有数百万这样的用户。
{ "uid": 14105529, "o": [
{
"mid": 6551,
"ac": 1913,
"ip": "144.36.233.44",
"adw": 5,
"at": 133000,
"ad": 151015,
"aid": 0
},
{
"mid": 7552,
"ac": 1913,
"ip": "144.36.233.44",
"adw": 5,
"at": 133000,
"ad": 151015,
"aid": 0
},
{
"mid": 7553,
"ac": 1913,
"ip": "144.36.233.44",
"adw": 5,
"at": 133000,
"ad": 151015,
"aid": 0
} ]
}
下面的查询会引发错误,因为它在un-sharded表上执行。
select count(1) from mytest,jsonb_array_elements(data->'l') where (value->>'e')::bigint>7000;
ERROR: cannot perform distributed planning on this query
DETAIL: Complex table expressions are currently unsupported
答
jsonb_array_elements(data->'l')
导致的CTE要创建这将导致此查询被拒绝,你可以重新写你的查询,以避免加入?