On 09/19/2013 04:52 PM, Anssi Kääriäinen wrote:
> After some investigation it turns out that this isn't about
> IntegrityErrors at all. Instead the problem is that inside @atomic block
> Model.save() uses @atomic(savepoint=False) internally. And
> @atomic(savepoint=False) forces the outer atomic block to roll back if
> errors
> happen.
>
> If I recall correctly there is transaction.set_rollback(False) which
> can be used to remove forced rollback.
>
> In general, there are three ways to respond to errors inside transactions:
>   1. allow usage of the TX (MySQL, SQLite etc), allow user to decide
> commit/rollback
>   2. forbid usage of the TX (PostgreSQL), force it to be rolled back.
Actually you can use subtransactions in postgresql if you want to manage
failed queries yourself

BEGIN;
<do something>;
SAVEPOINT sp1;
<do something that fails>;
ROLLBACK TO SAVEPOINT sp1;
<do something else>;
COMMIT:

this will commit <do something>; and <do something else>; while rolling
back the failed <do something that fails>;
you can read more on this in
http://www.postgresql.org/docs/9.1/static/sql-rollback-to.html

Cheers

-- 
Hannu Krosing
PostgreSQL Consultant
Performance, Scalability and High Availability
2ndQuadrant Nordic OÜ

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at http://groups.google.com/group/django-developers.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to