В статье "PostgreSQL Version 8's Transaction Savepoints Can Save Your Data" демонстрируется пример использования новой возможности PostgreSQL 8, - контрольных точек (Savepoints) в пределах одной транзакции, с возможностью отката на определенную позицию, а не прерывание всей транзакции в целом.
Пример:
BEGIN;
INSERT INTO foo(column1,column2,column3) VALUES (1,2,0);
SAVEPOINT main_values_inserted;
INSERT INTO foo(column1,column2,column3) VALUES (1,2,1/0);
ROLLBACK TO main_values_inserted;
INSERT INTO foo(column1,column2,column3) VALUES (5,9,10);
SAVEPOINT secondary_values_inserted;
DELETE FROM foo;
ROLLBACK TO secondary_values_inserted;
COMMIT;
|