gpt4 book ai didi

postgresql - 如何在 PostgreSQL 中调试触发器递归?

转载 作者:行者123 更新时间:2023-11-29 13:18:09 24 4
gpt4 key购买 nike

如何确定我拥有的触发器在 PostgreSQL 中是递归的还是循环的? 有使用示例吗?

我正在寻找如何 add code to my current trigger 的示例检查失败的原因是否是递归。

最佳答案

您可以 RAISE NOTICEpg_trigger_depth();这是一个我们也使用 TG_NAME 的例子

CREATE TABLE foo (id int primary key);

CREATE FUNCTION bar()
RETURNS trigger
AS $$
BEGIN
-- Debugging information
RAISE NOTICE '[%] TRIGGER DEPTH %', TG_NAME, pg_trigger_depth();
INSERT INTO foo VALUES (42);
RETURN null;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER bar
AFTER INSERT ON foo
FOR EACH ROW
EXECUTE PROCEDURE bar();

INSERT INTO foo VALUES (41);

运行这个产生

NOTICE:  [bar] TRIGGER DEPTH 1
NOTICE: [bar] TRIGGER DEPTH 2
ERROR: duplicate key value violates unique constraint "foo_pkey"
DETAIL: Key (id)=(42) already exists.
CONTEXT: SQL statement "INSERT INTO foo VALUES (42)"
PL/pgSQL function bar() line 5 at SQL statement
SQL statement "INSERT INTO foo VALUES (42)"
PL/pgSQL function bar() line 5 at SQL statement

虽然这将有助于调试情况 making a system dependent on this behavior is not a good idea .

关于postgresql - 如何在 PostgreSQL 中调试触发器递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46133574/

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