gpt4 book ai didi

postgresql - 调试 postgresql 触发器

转载 作者:行者123 更新时间:2023-11-29 11:08:15 28 4
gpt4 key购买 nike

我在 Postgresql 中有这个触发器,我无法开始工作(什么都不做)。为了便于理解,我是这样定义它的:

CREATE TABLE documents (
...
modification_time timestamp with time zone DEFAULT now()
);

CREATE FUNCTION documents_update_mod_time() RETURNS trigger
AS $$
begin
new.modification_time := now();
return new;
end
$$
LANGUAGE plpgsql;

CREATE TRIGGER documents_modification_time
BEFORE INSERT OR UPDATE ON documents
FOR EACH ROW
EXECUTE PROCEDURE documents_update_mod_time();

现在让它变得更有趣一点。您如何调试触发器?

最佳答案

  1. 在触发器函数中使用以下代码,然后查看 pgAdmin3 中的“消息”选项卡或 psql 中的输出:

    RAISE NOTICE 'myplpgsqlval is currently %', myplpgsqlval;       -- either this
    RAISE EXCEPTION 'failed'; -- or that
  2. 要查看实际调用了哪些触发器、调用了多少次等,以下语句是救命稻草:

    EXPLAIN ANALYZE UPDATE table SET foo='bar'; -- shows the called triggers

    请注意,如果您的触发器未被调用并且您使用了继承,则可能是您只在父表上定义了触发器,而子表不会自动继承触发器。

  3. 要逐步执行该功能,您可以使用 pgAdmin3 中内置的调试器,它在 Windows 上默认启用;你所要做的就是对你正在调试的数据库执行在 ...\8.3\share\contrib\pldbgapi.sql 中找到的代码,重新启动 pgAdmin3,右键单击你的触发函数,点击“设置断点”,然后执行会导致触发器触发的语句,例如上面的 UPDATE 语句。

关于postgresql - 调试 postgresql 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/306439/

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