在 PostgreSQL 8.3 数据库中,我有按 ID 引用“booking_transactions”表的“bookings”表。这样每个预订都属于一个单一的交易。可以从数据库中删除预订。
当引用它的所有“预订”都消失时,如何确保自动删除“booking_transactions”行?
我怀疑 ON DELETE "bookings" 触发器不起作用,因为它必须查询 "bookings" 表的其他行。
在 PostgreSQL 8.3 数据库中,我有按 ID 引用“booking_transactions”表的“bookings”表。这样每个预订都属于一个单一的交易。可以从数据库中删除预订。
当引用它的所有“预订”都消失时,如何确保自动删除“booking_transactions”行?
我怀疑 ON DELETE "bookings" 触发器不起作用,因为它必须查询 "bookings" 表的其他行。
“预订”上的触发器应该可以在触发器函数中查询表本身没有问题。
以下 plpgsql 触发器函数完成了这项工作
BEGIN
DELETE FROM
booking_transactions bt
WHERE
bt.id = OLD.transaction_id AND
NOT EXISTS (SELECT 1 FROM bookings b WHERE b.transaction_id = bt.id);
RETURN OLD;
END;
必须在预订的 DELETE 后执行