Joshua Tolley wrote:
On Thu, Jul 23, 2009 at 02:04:53AM -0400, Glenn Maynard wrote:
On Thu, Jul 23, 2009 at 1:31 AM, Richard Huxton<d...@archonet.com> wrote:
- Let me use SAVEPOINT outside of a transaction,
You are never outside a transaction. All queries are executed within a
transaction.
"Transaction block", then, if you insist.
I think this is the root of your problem - all queries are within a
transaction so either:
1. You have a transaction that wraps a single statement. If you get an error
then only that statement was affected.
2. You have an explicit BEGIN...COMMIT transaction which could use a
savepoint.
Savepoints can only be used inside transaction blocks. My function
has no idea whether it's being called inside a transaction block.
From inside a transaction block, my function would need to call
SAVEPOINT/RELEASE SAVEPOINT.
If it's not in a transaction block, it needs to call BEGIN/COMMIT
instead. SAVEPOINT will fail with "SAVEPOINT can only be used in
transaction blocks".
Have you tried this? I expect if you give it a shot, you'll find you don't
actually have this problem. Really, everything is always in a transaction.
Each statement is in it's own transaction, but the problem (as I
understand it) is that you're in this sort of situation:
psql -d dbname
..
# select now();
now
-------------------------------
2009-07-23 17:04:21.406424+10
(1 row)
Time: 2.434 ms
(csm...@[local]:5432) 17:04:21 [test]
# savepoint xyz;
ERROR: SAVEPOINT can only be used in transaction blocks
(csm...@[local]:5432) 17:04:25 [test]
You haven't explicitly started a transaction, therefore savepoints won't
work.
Django (it seems) just issues queries with no knowledge of (and no way
to support) them.
--
Postgresql & php tutorials
http://www.designmagick.com/
--
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql