Postgres: Полезная нагрузка не получена при использовании pg_notify с библиотекой `node-postgres` Javascript - PullRequest
0 голосов
/ 02 марта 2020

Я указал функцию, которая выполняется после вставки строки в таблицу. Эта функция использует функцию pg_notify для уведомления канала jobqueue с помощью JSON полезной нагрузки новой строки.

job_notifier Функция:

  CREATE FUNCTION job_notifier() RETURNS TRIGGER AS $$
  BEGIN
    PERFORM pg_notify('jobqueue', row_to_json(NEW)::text);
    RETURN NEW;
  END;
  $$ LANGUAGE plpgsql;

Это триггер: CREATE TRIGGER job_created AFTER INSERT ON jobs EXECUTE FUNCTION job_notifier();

Таблица jobs состоит из нескольких столбцов.

Я использую библиотеку node- postgres для доступа к базе данных. Один из моих JS клиентов, созданных с помощью этой библиотеки, получает сообщение, поэтому я знаю, что функция запускается в нужный момент.

Однако полезная нагрузка - пустая строка. Когда я заменяю row_to_json(NEW)::text простой строкой, такой как 'abcd', я получаю эту полезную нагрузку, поэтому по какой-то причине преобразование в JSON объект не выполняется.

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

Кто-нибудь использовал node-postgres для такого рода установки? База данных работает внутри контейнера docker (официальное postgres изображение из Dockerhub), может быть, я мог бы включить какую-то регистрацию, чтобы увидеть, генерируется ли полезная нагрузка в базе данных?

1 Ответ

1 голос
/ 03 марта 2020

Значение по умолчанию для триггера должно быть запущено один раз для каждого оператора, для которого NEW имеет значение NULL, что приводит к отсутствию полезной нагрузки. Если вы хотите, чтобы ваш триггер срабатывал один раз для каждой строки с заполнением NEW, вы должны указать его.

CREATE TRIGGER job_created AFTER INSERT ON jobs FOR EACH ROW 
    EXECUTE FUNCTION job_notifier();
...