如何在PostgresSQL中为多个模式和表创建触发函数。
我需要用于多个表和架构的单个函数。
尝试以下代码。
功能:
CREATE OR REPLACE FUNCTION public.update_modifiedUser(pSchemaName text, pTableName text)
RETURNS trigger AS
$BODY$
DECLARE
vUserid numeric;
BEGIN
select t.userid into vUserid from public.user_login_details t where inet (t.systemid) = inet_client_addr() order by t.id desc limit 1;
UPDATE pSchemaName||.||pTableName SET modified_user = vUserid ,modified_date = now() WHERE ID = NEW.ID;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
触发:
CREATE TRIGGER trg_modUser_aerial
BEFORE UPDATE OF geom
ON sandiego.aerial
FOR EACH ROW
EXECUTE PROCEDURE public.update_modifiedUser('sandiego','aerial');
在运行函数时出现此错误:
错误:触发器函数不能具有已声明的参数
提示:可以通过TG_NARGS访问触发器的参数 和TG_ARGV。
上下文:附近的PL / pgSQL函数“ update_modifieduser”的编译 第1行
让我知道我的功能有何变化
答案 0 :(得分:0)
在您所处的位置,我会SET search_path
适当地出现在函数体中,那么您无需对函数内部的对象进行模式限定,并且无需太多动态SQL就可以工作。
您可以从TG_TABLE_SCHEMA
变量中获取表的架构,也可以将其作为参数传递给CREATE TRIGGER
中的触发函数,并从TG_ARGV[]
中读取。