M
| mike_pg |
| Junior |
Сообщения: 27 |
Репутация: 9 |
| Дата регистрации: |
| 15.09.2026 |
АВТОР ТЕМЫ04 нояб. 2026 г., 17:00 (GMT+3)
Цепочка простая: датчик температуры раз в минуту шлёт POST на webhook в n8n, n8n делает INSERT в таблицу readings (id serial, sensor_id, ts, value). Вчера вечером n8n перезапускался, датчик не дождался ответа и, как положено по прошивке, отправил свой буфер заново. Сервис ожил, всё зелёное. Сегодня смотрю:
Шесть показаний, двенадцать строк. Значения совпадают до последней цифры, отличаются только id. Видимо, первую попытку n8n всё-таки успел записать, но ответ до датчика не дошёл.
Страшного пока ничего: средняя за час съехала чуть-чуть. Но если n8n начнёт падать чаще, график станет врать уже заметно.
Варианты вижу такие: UNIQUE (sensor_id, ts) и INSERT ... ON CONFLICT DO NOTHING; отдельный message_id от датчика, если прошивка его отдаёт; или проверка в самом n8n перед записью. Смущает первый: два честных показания в одну секунду он молча выкинет. Где обычно ловят такие повторы — в базе или до неё?
SELECT sensor_id, ts, count(*)
FROM readings
WHERE ts > now() - interval '1 day'
GROUP BY 1, 2 HAVING count(*) > 1;
sensor_id | ts | count
-----------+------------------------+-------
3 | 2026-11-03 21:14:00+06 | 2
3 | 2026-11-03 21:15:00+06 | 2
...
(6 rows)
Шесть показаний, двенадцать строк. Значения совпадают до последней цифры, отличаются только id. Видимо, первую попытку n8n всё-таки успел записать, но ответ до датчика не дошёл.
Страшного пока ничего: средняя за час съехала чуть-чуть. Но если n8n начнёт падать чаще, график станет врать уже заметно.
Варианты вижу такие: UNIQUE (sensor_id, ts) и INSERT ... ON CONFLICT DO NOTHING; отдельный message_id от датчика, если прошивка его отдаёт; или проверка в самом n8n перед записью. Смущает первый: два честных показания в одну секунду он молча выкинет. Где обычно ловят такие повторы — в базе или до неё?
0