Bạn có thể đạt được điều đó với trình kích hoạt cấp câu lệnh SAU KHI XÓA. Bên trong hàm kích hoạt, bạn có thể đếm số hàng bị ảnh hưởng và đưa ra một ngoại lệ nếu số lượng quá cao. Ngoại lệ sẽ buộc khôi phục giao dịch đã bắt đầu xóa.
create function prevent_delete()
returns trigger
as
$BODY$
declare
l_count integer;
begin
select count(*)
into l_count
from old_table;
if l_count > 5 then
raise exception 'Too many rows would be deleted';
end if;
return null;
end;
$BODY$
LANGUAGE plpgsql;
Và sau đó tạo trình kích hoạt:
create trigger prevent_mass_delete
after delete on the_table
referencing old table as old_table
for each statement
execute procedure prevent_delete();