Làm thế nào để ngăn chặn việc thực hiện đệ quy kích hoạt? Giả sử tôi muốn xây dựng mô tả "có thể có cây" trên biểu đồ tài khoản. Vì vậy, những gì tôi làm là khi một bản ghi mới được chèn/cập nhật, tôi cập nhật bản ghi của phụ huynh là down_qty
, vì vậy điều này sẽ kích hoạt trình kích hoạt cập nhật đệ quy.Ngăn chặn kích hoạt đệ quy trong PostgreSQL
Ngay bây giờ, mã của tôi là ok - Tôi đặt này trên dòng đầu tiên UPDATE
kích hoạt của:
-- prevents recursive trigger
if new.track_recursive_trigger <> old.track_recursive_trigger then
return new;
end if;
Và đây là đoạn code mẫu từ cò của tôi khi tôi cần phải cập nhật qty kỷ lục của cha mẹ:
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;
Tôi đang suy nghĩ xem có cách nào trong PostgreSQL phát hiện trình kích hoạt đệ quy mà không đưa vào trường mới hay không, tương tự như số trigger_nestlevel
của MSSQL.
[EDIT]
Tôi lặp bên trong cây, tôi cần phải bong bóng lên down_qty
của mỗi account_category
trở lại gốc rễ của nó. Ví dụ: tôi chèn danh mục tài khoản mới, cần tăng số down_qty
của số phụ huynh account_category
, tương tự như vậy khi tôi thay đổi phụ huynh của danh mục tài khoản account_category
, tôi cần phải giảm số down_qty
của số account_category
trước đó của cha mẹ account_category
. Mặc dù tôi nghĩ rằng nó có thể, tôi không cho phép PostgreSQL kích hoạt đệ quy. Tôi đã sử dụng MSSQL trước khi kích hoạt mức độ đệ quy sâu chỉ giới hạn ở mức 16
.
Tôi nghĩ bạn nên giải thích chi tiết hơn một chút, vì tôi có thể thấy không có nguy cơ gọi đệ quy ở đây trừ khi bạn có : bản ghi đó là cha mẹ của chính nó, hoặc vòng trong cây của bạn (mà không phải là cây sau đó). –