Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PostgresSQL中为多个模式和表创建触发器函数_Sql_Postgresql_Plpgsql_Database Trigger - Fatal编程技术网

如何在PostgresSQL中为多个模式和表创建触发器函数

如何在PostgresSQL中为多个模式和表创建触发器函数,sql,postgresql,plpgsql,database-trigger,Sql,Postgresql,Plpgsql,Database Trigger,如何在PostgresSQL中为多个模式和表创建触发器函数 我需要一个用于多个表和模式的函数 我正在尝试下面的代码 功能: CREATE OR REPLACE FUNCTION public.update_modifiedUser(pSchemaName text, pTableName text) RETURNS trigger AS $BODY$ DECLARE vUserid numeric; BEGIN select

如何在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行


让我知道我的函数中的任何更改

我在你的位置将
在函数体中适当地设置搜索路径
,这样你就不需要对函数中的对象进行模式限定,也可以在没有太多动态SQL的情况下工作

您可以从
TG\u table\u schema
变量中获取表的架构,也可以将其作为参数传递给
CREATE trigger
中的trigger函数,并从
TG\u ARGV[]读取它

请参阅。

副本