Почему в n8n появляется ошибка «payload string too long»
Если при обновлении данных в PostgreSQL у тебя в n8n вылетает ошибкаpayload string too long
, значит база данных пытается передать слишком большой кусок текста в уведомлении, которое уходит в триггерную ноду n8n.
Когда ты подключаешь PostgreSQL Trigger в n8n к таблице (или указываешь *
, чтобы ловить все изменения), n8n создаёт в базе специальную функцию.
Эта функция при каждом INSERT
, UPDATE
или DELETE
отправляет уведомление в n8n через встроенную команду pg_notify
.
Примерно это выглядит так:
pg_notify('n8n_trigger_xxx', данные_строки_в_JSON_виде);
n8n слушает эти уведомления и запускает workflow, когда в таблице что-то изменяется.
PostgreSQL не может отправлять через pg_notify
сообщения больше 8 килобайт.
Это встроенное ограничение в коде сервера.
Если запись содержит большое текстовое поле (например, text
, seo_text
, html
, description
), то при обновлении этой записи PostgreSQL не сможет уместить весь JSON в лимит и выдаст ошибку:
ERROR: payload string too long
Это не настройка и не ошибка n8n.
Размер payload
жёстко зашит в исходный код PostgreSQL (NOTIFY_PAYLOAD_MAX_LENGTH = 8000
).
Изменить его нельзя ни через конфигурацию, ни через параметры.
Даже после пересборки сервера n8n всё равно не сможет принять большие уведомления.
Которое реализовал под себя.
Создай отдельную таблицу уведомлений, куда будут записываться изменения по ID строк. n8n будет слушать уже эту таблицу, а не исходную.
Пример структуры таблицы:
CREATE TABLE public.change_log ( id serial PRIMARY KEY, id_seo_text integer, step integer, created_at timestamp default now() );
Далее:
В n8n теперь нужно подключить PostgreSQL Trigger Node не к таблице seo_text
, а к таблице change_log
.
При каждом изменении в seo_text
туда будет попадать запись с ID и типом операции, и этот факт увидит n8n.
В workflow после срабатывания триггера n8n можно сделать запрос:
SELECT * FROM public.seo_text WHERE id = {{ $json.id_seo_text}};
— чтобы получить все нужные данные по ID.
⚙️ Не нужно менять существующие функции триггеров, которые создаёт n8n.
🧱 Никаких ограничений по размеру текста — ведь pg_notify
теперь передаёт только ID, а не весь контент.
🔄 Поддерживается любое количество таблиц — можно писать в change_log
из разных таблиц и отслеживать все изменения централизованно.
💡 Работает стабильно и предсказуемо даже при больших данных.
Ошибка не в n8n, а в ограничении PostgreSQL — pg_notify
не может передавать больше 8 КБ.
Увеличить лимит невозможно.
Самое простое решение — вести отдельную таблицу уведомлений,
записывать туда ID изменённых строк, а n8n настраивать на прослушивание именно этой таблицы.