Re: Bit by "commands ignored until end of transaction block" again
От | Chris |
---|---|
Тема | Re: Bit by "commands ignored until end of transaction block" again |
Дата | |
Msg-id | 4A680C03.6040701@gmail.com обсуждение исходный текст |
Ответ на | Re: Bit by "commands ignored until end of transaction block" again (Joshua Tolley <eggyknap@gmail.com>) |
Ответы |
Re: Bit by "commands ignored until end of transaction block" again
Re: Bit by "commands ignored until end of transaction block" again |
Список | pgsql-sql |
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<dev@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 (csmith@[local]:5432) 17:04:21 [test] # savepoint xyz; ERROR: SAVEPOINT can only be used in transaction blocks (csmith@[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/
В списке pgsql-sql по дате отправления: