ПО КОНФЛИКТУ ОБНОВЛЯЕТСЯ ГДЕ ПРЕДИКТОМ? - PullRequest
0 голосов
/ 12 марта 2019

У меня есть базовая таблица, на которой я пытаюсь выполнить UPSERT:

CREATE TABLE myTable (start_time timestamp, end_time timestamp, id BIGINT NOT NULL, kpi BIGINT,PRIMARY KEY(start_time, id));

Я хочу выполнять скользящее обновление этой таблицы каждый час в течение периода времени дня, чтобыкак только закончится end_time, я хочу создать новую строку, обозначающую новый 24-часовой период, чтобы начать снова.

INSERT INTO myTable(start_time,end_time,id,kpi) 
VALUES  ('2011-05-18 18:36:38', '2011-05-16 18:36:38' + interval '24 hour', 1,5)
ON CONFLICT (start_time, id) WHERE id= 1 AND '2011-05-18 18:36:38' BETWEEN start_time AND end_time DO UPDATE 
SET ....

Проблема, с которой я столкнулся, заключается в том, что я не могу определить предложение where, которое позволяет мне проверять новые значения на основе времени начала и окончания, которое я уже ввел.Таким образом, в этом примере данные, поступающие через час (например, 19:36), вставляют новую строку вместо обновления существующей для этого периода времени

, когда я смотрю на страницу postgres сказано следующее:

Чтобы использовать функцию upsert в PostgreSQL, используйте оператор INSERT ON CONFLICT следующим образом:

INSERT INTO table_name (column_list) VALUES (value_list) ON CONFLICT targetaction;

PostgreSQL добавил условие целевого действия ON CONFLICT в оператор INSERT для поддержки функции upsert

Цель может быть:

(column_name) - имя столбца.

ON CONSTRAINT constraint_name - где именем ограничения может быть имя ограничения UNIQUE.

WHERE Предикат - предложение WHERE с предикатом

, но я могуне похоже, где предикат работает.есть идеи?

...