0

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

在这里我在通知之前插入记录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 之后插入记录。

我怎样才能做到这一点?

4

1 回答 1

1

你得到错误query has no destination for result data。检查您的日志以确保。

在 PL/pgSQL 代码中使用 SELECT 时,您需要对返回的数据做一些事情,例如将其插入到表或变量中。

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

PERFORM listerner_to_insert_code(resVal);

于 2018-10-15T07:36:16.950 回答