如何防止触发器的递归执行?假设我想在会计科目表上构建一个"可树"的描述.所以我要做的是,当插入/更新一个新记录时,我更新父记录的down_qty,这样就会递归地触发更新触发器.

现在,我的代码还可以——我把这个放在UPDATE触发器的第一行:

-- prevents recursive trigger
if new.track_recursive_trigger <> old.track_recursive_trigger then
    return new;
end if;

当我需要更新父记录的数量时,这是触发器中的示例代码:

update account_category set 
    track_recursive_trigger = track_recursive_trigger + 1, -- i put this line to prevent recursive trigger
    down_qty = down_qty - (old.down_qty + 1)
where account_category_id = m_parent_account;

我在想,在PostgreSQL中是否有一种方法可以在不引入新字段的情况下检测递归触发器,类似于MSSQL的trigger_nestlevel.

[EDIT]

我在树里面循环,我需要把每一个account_category中的down_qty个吹回树根.例如,我插入一个新的帐户类别,它需要增加其父级account_categorydown_qty,同样,当我更改帐户类别的父级account_category时,我需要减少account_category以前父级account_categorydown_qty.虽然我认为可以,但我不会让PostgreSQL执行递归触发.我以前使用过MSSQL,其中触发器递归深度级别仅限于16个级别.

推荐答案

在pg中,由您来跟踪触发器递归.

如果触发器函数执行SQL

https://www.postgresql.org/docs/13/trigger-definition.html

Postgresql相关问答推荐

Keycloak和PostgreSQL

SQLX::Query!带有UUID::UUID的宏在Rust中编译失败

Postgres:创建分区需要很长时间

ST_Intersects 太慢

gorm 创建并返回值 many2many

在 postgresql 数据库 timestampz 中保留用户偏移量

将 postgres 从属提升为主 node

Django 1.8 数组字段追加和扩展

在 PostgreSQL 中返回插入的行

Postgres/psycopg2 - 插入字符串数组

如何将 DELETE 的返回值插入到 postgresql 中的 INSERT 中?

Postgres 在 WHERE id != int 查询中排除 NULL

NOT LIKE 带有 NULL 值的行为

是否可以在 CSV 格式的 Postgres COPY 命令中关闭报价处理?

PostgreSQL 中是否有类似 zip() 函数的东西,它结合了两个数组?

如何在Postgres中分组并返回总和行

ruby on rails jsonb 列默认值

错误:无法在只读事务中执行 CREATE TABLE

Rails ActiveRecord:PG::Error:错误:column reference "created_at" is ambiguous

在 docker-compose up 后加载 Postgres 转储