PostgreSQL:LISTEN与插入

时间:2018-10-15 06:25:52

标签: sql postgresql

我有一个通知功能并触发如下

这里我要在通知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 :(得分:1)

您遇到错误query has no destination for result data。检查您的日志以确认。

在PL / pgSQL代码中使用SELECT时,您需要对返回的数据执行某些操作,例如将其插入表或变量中。

如果您不想对返回的数据做任何事情,请改用PERFORM

PERFORM listerner_to_insert_code(resVal);