PostgreSQL: СЛУШАТЬ со вставкой - PullRequest
0 голосов
/ 15 октября 2018

У меня есть одна функция уведомления и триггер, как показано ниже

Здесь я вставляю записи перед уведомлением listerner_to_insert_code(resVal)

CREATE OR REPLACE FUNCTION public.codes_notify_trigger()
  RETURNS trigger AS
$BODY$
    DECLARE
      resVal text;
    BEGIN
       resVal := row_to_json(NEW);
     select listerner_to_insert_code(resVal);

       PERFORM pg_notify('code_channel', resVal::text);

       RETURN new;
     END;
    $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

CREATE TRIGGER codeInsertTrigger
  AFTER INSERT OR UPDATE
  ON public.codings
  FOR EACH ROW
  EXECUTE PROCEDURE public.codes_notify_trigger();

Тогда я не вижу полезные данные на

Когда я пытался

LISTEN code_channel

Но я могу видеть полезную нагрузку, если я удаляю select listerner_to_insert_code(resVal)

Здесь ниже она покажет полезную нагрузку

CREATE OR REPLACE FUNCTION public.codes_notify_trigger()
      RETURNS trigger AS
    $BODY$
        DECLARE
          resVal text;
        BEGIN
           resVal := row_to_json(NEW);

           PERFORM pg_notify('code_channel', resVal::text);

           RETURN new;
         END;
        $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;

НоЯ хочу вставить запись после LISTEN.

Как мне этого добиться?

1 Ответ

0 голосов
/ 15 октября 2018

Вы получаете ошибку query has no destination for result data.Проверьте свои журналы, чтобы убедиться.

При использовании SELECT в коде PL / pgSQL вам нужно что-то делать с возвращенными данными, например, ВСТАВЛЯТЬ их в таблицу или переменную (и).

Если вы не хотите ничего делать с возвращенными данными, используйте вместо этого PERFORM.

PERFORM listerner_to_insert_code(resVal);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...