【问题标题】:how to create trigger functions in PostgresSQL for multiple schemas and tables如何在 PostgresQL 中为多个模式和表创建触发器函数
【发布时间】:2019-05-14 19:51:20
【问题描述】:

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

CONTEXT:PL/pgSQL 函数“update_modifieduser”的编译附近 第 1 行

让我知道我的功能有什么变化

【问题讨论】:

标签: sql postgresql plpgsql database-trigger


【解决方案1】:

我在你的位置会在函数体中适当地SET search_path,然后你不需要架构限定你的函数中的对象并且可以在没有太多动态 SQL 的情况下工作。

您可以从TG_TABLE_SCHEMA 变量中获取表的架构,或者您可以将其作为参数传递给CREATE TRIGGER 中的触发器函数并从TG_ARGV[] 中读取。

the documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多