Thread: How to implement nested transactions

How to implement nested transactions

From
"Andrus"
Date:
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.



Re: How to implement nested transactions

From
Tom Lane
Date:
"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

Re: How to implement nested transactions

From
"Andrus"
Date:
> 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.