首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在postgresql中从update触发器记录“新表”?

问如何在postgresql中从update触发器记录“新表”?
EN

Stack Overflow用户
提问于 2022-10-26 08:06:36
回答 1查看 22关注 0票数 0

我有一个复杂的触发器,它在更新表时执行。

当我用“新表”替换为现有表时,我得到了我想要的东西,但是当它被update调用时,它会把事情搞砸。

我想调试这一点,我想从查看我的触发器作为“新表”开始。我该怎么看呢?

代码语言:javascript
复制
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$
;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-26 10:35:23

您可以将其转储到表中,并在测试更新后检查其内容。

代码语言:javascript
复制
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别名)。

代码语言:javascript
复制
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)

示例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74204513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档