patternsqlModerate
Transactions within a Transaction
Viewed 0 times
withintransactionstransaction
Problem
What behaviour would PostgreSQL display if for example the script below were called
Would PostgreSQL discard the second
BEGIN;
SELECT * FROM foo;
INSERT INTO foo(name) VALUES ('bar');
BEGIN; <- The point of interest
END;Would PostgreSQL discard the second
BEGIN or would a commit be implicitly decided on and then run the BEGIN END block at the end as a separate transaction?Solution
What you would need is a so called "autonomous transaction" (a feature provided by oracle). At this point this is not possible in PostgreSQL yet.
However, you can use SAVEPOINTs:
It is not entirely an autonomous transaction - but, it allows you get "every transaction" right. You can use it to achieve the thing you expect from autonomous transactions.
Otherwise there are no other reasonable solution at this point.
However, you can use SAVEPOINTs:
BEGIN;
INSERT ...
SAVEPOINT a;
some error;
ROLLBACK TO SAVEPOINT a;
COMMIT;It is not entirely an autonomous transaction - but, it allows you get "every transaction" right. You can use it to achieve the thing you expect from autonomous transactions.
Otherwise there are no other reasonable solution at this point.
Code Snippets
BEGIN;
INSERT ...
SAVEPOINT a;
some error;
ROLLBACK TO SAVEPOINT a;
COMMIT;Context
StackExchange Database Administrators Q#81011, answer score: 18
Revisions (0)
No revisions yet.