在pgAdmin 4中创建触发功能。

问题描述 投票:0回答:1

我想用pgAdmin 4在PostgreSQL数据库中创建一个触发函数,该函数应该执行pg_notify并以JSON格式返回新插入的数据。但是我得到了一个错误,我不知道哪里出了问题。

代码:错误:PgAdmin 4

CREATE FUNCTION ba_weather.weather_notify_func()
  RETURNS trigger
  LANGUAGE 'plpgsql'
  NOT LEAKPROOF
AS $BODY$ CREATE OR REPLACE FUNCTION weather_notify_func()
 RETURNS TRIGGER
 LANGUAGE plpgsql
 AS $$
 BEGIN
    PERFORM pg_notify('weather_insert', row_to_json(NEW));
    RETURN NEW;
 END;
 $$;$BODY$;

ALTER FUNCTION ba_weather.weather_notify_func()
   OWNER TO me;

错误。

enter code here
ERROR: syntax error at or near "CREATE"
LINE 5: AS $BODY$ CREATE OR REPLACE FUNCTION weather_notify_func()
^

解决办法是:

CREATE FUNCTION ba_weather.weather_notify_func()
  RETURNS trigger
  LANGUAGE 'plpgsql'
  NOT LEAKPROOF
AS $BODY$ 
 BEGIN
    PERFORM pg_notify('weather_insert', row_to_json(NEW));
    RETURN NEW;
 END;
 $BODY$;

ALTER FUNCTION ba_weather.weather_notify_func()
   OWNER TO me;
postgresql plpgsql database-trigger pgadmin-4
1个回答
1
投票

你又把函数定义嵌套到创建函数语句中。

CREATE FUNCTION ba_weather.weather_notify_func()
  RETURNS trigger
  LANGUAGE plpgsql
  NOT LEAKPROOF
AS $BODY$ 
BEGIN
  PERFORM pg_notify('weather_insert', row_to_json(NEW));
  RETURN NEW;
END;
$BODY$;

ALTER FUNCTION ba_weather.weather_notify_func()
   OWNER TO me;
© www.soinside.com 2019 - 2024. All rights reserved.