How to implement nested transactions

Started by Andrusabout 20 years ago3 messagesgeneral
Jump to latest
#1Andrus
eetasoft@online.ee

I want to implement nest transactions like

begin;
CREATE temp table t2 (foo char(20) primary key);
begin;
CREATE temp table t1 (bar char(20) primary key);
commit;
rollback;

I'm expecting that t1 and t2 tables are not created since last rollback
rolls back its nested transaction.

However, both tables are created.

Any idea hot to force parent transaction rollback to roll back committed
nested transactions ?

Andrus.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrus (#1)
Re: How to implement nested transactions

"Andrus" <eetasoft@online.ee> writes:

I want to implement nest transactions like
begin;
CREATE temp table t2 (foo char(20) primary key);
begin;
CREATE temp table t1 (bar char(20) primary key);
commit;
rollback;

That is not the correct syntax. Use SAVEPOINT, then ROLLBACK TO SAVEPOINT
or RELEASE SAVEPOINT.

regards, tom lane

#3Andrus
eetasoft@online.ee
In reply to: Andrus (#1)
Re: How to implement nested transactions

That is not the correct syntax. Use SAVEPOINT, then ROLLBACK TO SAVEPOINT
or RELEASE SAVEPOINT.

postgres log file:

2006-01-26 21:45:59 LOG: statement: INSERT INTO dok .....
2006-01-26 21:45:59 ERROR: insert or update on table "dok" violates foreign
key constraint "dok_klient_fkey"
2006-01-26 21:45:59 DETAIL: Key (klient)=(ESTATEINVEST) is not present in
table "klient".
2006-01-26 21:45:59 STATEMENT: INSERT INTO dok ........
2006-01-26 21:45:59 LOG: statement: ROLLBACK <-- this statement seems to
be generated automatically by Microsoft Visual FoxPro or by Postgres ODBC
driver
2006-01-26 21:45:59 LOG: statement: ROLLBACK TO savepoint copyone
2006-01-26 21:45:59 ERROR: ROLLBACK TO SAVEPOINT may only be used in
transaction blocks

My client application (Microsoft Visual FoxPro 9) seems to generate
automatic ROLLBACK statement in case
if one of its commands (APPEND FROM TABLE) fails
I have'nt found a way to disable this ROLLBACK

So I'm looking a way to force Postgres to ignore this ROLLBACK

Andrus.