У меня есть базовая таблица, на которой я пытаюсь выполнить 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 с предикатом
, но я могуне похоже, где предикат работает.есть идеи?