Opened 13 years ago
Closed 12 years ago
#18130 closed New feature (fixed)
postgres_psycopg2 adapter should not use hard coded isolation levels
Reported by: | limscoder | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.4 |
Severity: | Normal | Keywords: | postgres |
Cc: | niwi@… | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Django's postgres_psycopg2 adapter sets the connection's isolation level to psycopg2.extensions.ISOLATION_LEVEL_READ_COMMITTED when autocommit == False.
My application requires a more strict isolation level, so I am forced to create a new backend and override DatabaseWrapper._set_isolation_level to make sure the connection has the correct isolation level set.
There should be a configuration option within the database config in settings.py that allows users to set the appropriate isolation level if the default level is not correct for their application. It would also be nice if there was an option to not set the isolation level at all, and instead rely on the default isolation level provided by the Postgres server.
Change History (5)
comment:1 by , 13 years ago
Summary: | postgres_psycopg2 adapter uses hard coded isolation levels → postgres_psycopg2 adapter should not use hard coded isolation levels |
---|
comment:3 by , 12 years ago
Triage Stage: | Unreviewed → Accepted |
---|
Yes, we could provide a way to switch to "serializable" for people with high concurrency and integrity requirements.
IIRC, under the "serializable" isolation level, the application should be prepared to handle transaction failures (and possibly retry) on every database query. I'm not sure we can handle this automatically in Django without introducing magic. It deserves a fat warning in the documentation. This isolation level is for people who know what they're doing :)
NB: there is some material on this topic in #3460.
comment:4 by , 12 years ago
I think, does not need any kind of magic by django, as you say: "This isolation level is for people who know what they're doing."
I now update the patch with some checks for isolation_level value and documentation notes with warning.
comment:5 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Here the patch to allow to define the default isolation_level parameter on database configuracion dict: https://github.com/niwibe/django/compare/issue_18130
I ran the tests (not all tests) and I have not seen any fail that might be related.