#json #postgresql #psycopg2 #materialized-views
Вопрос:
Здравствуйте и заранее спасибо за помощь,
Я пытаюсь создать материализованное представление с помощью PSQL, используя библиотеку python psycopg2 со следующей структурой:
<materialized_view name>
time TIMESTAMPTZ NOT NULL,
robot_id TEXT,
data JSONB
Таблица, из которой я хочу создать материализованное представление, создается с помощью следующего запроса:
CREATE TABLE IF NOT EXISTS mainTable (
time TIMESTAMPTZ NOT NULL,
robot_id TEXT,
data JSONB);
Затем, чтобы проверить, можно ли сгенерировать запрос, выходные данные которого совпадают со структурой материализованного представления, я выполнил следующий запрос:
SELECT time_bucket('30s',time) as Bucket, robot_id,
json_build_object('value', avg((data->>'value')::numeric),'field', data->>'field') as data
FROM mainTable
WHERE time >= '2021-05-20 09:00:00' AND time <= '2021-05-20 10:00:00'
GROUP BY data->>'field', bucket, robot_id
ORDER BY 1
LIMIT 10;
Результат этого последнего запроса соответствует ожиданиям, и его можно увидеть здесь:
Результат выполнения предыдущего запроса
Однако, когда я хочу включить тот же запрос для создания материализованного представления, я получаю некоторые ошибки в ГРУППЕ, которые я не знаю, как решить.
Запрос, который я использую для создания материализованного представления, выглядит следующим образом:
CREATE MATERIALIZED VIEW IF NOT EXISTS mainTable_1sec
WITH (timescaledb.continuous) AS
SELECT time_bucket('1s', time) as Bucket,
json_build_object('field', data->>'field', 'value',avg(cast(data->>'value' as double precision))) as avg_data ,
robot_id
FROM mainTable
GROUP BY Bucket, data->>'field', robot_id
WITH NO DATA;
Когда я выполняю эту команду, материализованное представление создается правильно, но когда я выполняю запрос:
SELECT *
FROM mainTable_1sec
LIMIT 10;
Я получаю следующую ошибку:
ERROR: ORDER/GROUP BY expression not found in targetlist
Еще раз спасибо за вашу помощь,
Джорди.