我有一个复杂的触发器,它在更新表时执行。
当我用“新表”替换为现有表时,我得到了我想要的东西,但是当它被update调用时,它会把事情搞砸。
我想调试这一点,我想从查看我的触发器作为“新表”开始。我该怎么看呢?
CREATE TRIGGER foo_trigger AFTER
UPDATE
ON
public.table1 REFERENCING NEW TABLE AS new_table FOR EACH STATEMENT EXECUTE FUNCTION foo()
CREATE OR REPLACE FUNCTION public.foo()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
*do things with new_table*
RETURN NULL;
END;
$function$
;发布于 2022-10-26 10:35:23
您可以将其转储到表中,并在测试更新后检查其内容。
create table public.table1 (col1 integer);
insert into public.table1 values (0),(1),(2),(3);
create table public.foo_trigger_test as table public.table1 with no data;
CREATE OR REPLACE FUNCTION public.foo()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
insert into public.foo_trigger_test select a.* from new_table a;
RETURN NULL;
END;
$function$;
CREATE TRIGGER foo_trigger
AFTER UPDATE
ON public.table1
REFERENCING NEW TABLE AS new_table
FOR EACH STATEMENT
EXECUTE FUNCTION foo();现在,触发该函数的更新将转储它在NEW中获得的副本(由new_table别名)。
update public.table1 set col1=99 where col1 between 0 and 2;
table public.table1;
-- col1
--------
-- 3
-- 99
-- 99
-- 99
--(4 rows)
table public.foo_trigger_test;
-- col1
--------
-- 99
-- 99
-- 99
--(3 rows)https://stackoverflow.com/questions/74204513
复制相似问题