gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:23:48 24 4
gpt4 key购买 nike

如何在 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');

运行该函数时出现此错误:

ERROR: trigger functions cannot have declared arguments

HINT: The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead.

CONTEXT: compilation of PL/pgSQL function "update_modifieduser" near line 1

让我知道我的功能有任何变化

最佳答案

在你的位置,我会在函数体中适本地SET search_path,这样你就不需要对函数内的对象进行模式限定,并且可以在没有太多动态 SQL 的情况下工作。

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

参见 the documentation .

关于sql - 如何在 PostgresQL 中为多个模式和表创建触发器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53764524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com