Кирилл

Вечкасов

Статьи
Наши курсы

Кирилл

Вечкасов

>

>

Ошибка "payload string too long"

Почему в 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()
);

Далее:

  1. В n8n теперь нужно подключить PostgreSQL Trigger Node не к таблице seo_text, а к таблице change_log.
    При каждом изменении в seo_text туда будет попадать запись с ID и типом операции, и этот факт увидит n8n.

  2. В 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 настраивать на прослушивание именно этой таблицы.

Мои соц. сети

Подписывайся на мой Telegram-канал — там регулярно публикую фишки по n8n, кейсы по рекламе и практичные решения для бизнеса.