Postgres Cluster (citus): запрос диапазона для вложенного столбца jsonb

Я использую Postgres 9.5.4 настроен как кластер с использованием Citus 5.2

Таблица была очищена с использованием следующих команд.

SELECT master_create_distributed_table('mytest', 'id', 'hash');
SELECT master_create_worker_shards('mytest', 16, 1);

Ниже приведены примеры данных JSON, хранящихся в столбце JSONB, я хотел бы найти соответствующие записи

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

Приведенный ниже запрос выдает ошибку, где он выполняется на необолоченной таблице.

select count(1) from mytest,jsonb_array_elements(data->'l') where (value->>'e')::bigint>7000;

ОШИБКА: невозможно выполнить распределенное планирование по этому запросу

ДЕТАЛИ: Сложные табличные выражения в настоящее время не поддерживаются

1 ответ

jsonb_array_elements(data->'l') вызывает создание CTE, что приводит к отклонению этого запроса. Можете ли вы переписать свой запрос, чтобы избежать объединений?

Другие вопросы по тегам