#10467: Remove use of "RETURNING" in PostgreSQL backends by default
---------------------------------------------------+------------------------
Reporter: mtredinnick | Owner: mtredinnick
Status: reopened | Milestone: 1.1 beta
Component: Database layer (models, ORM) | Version: 1.0
Resolution: | Keywords:
Stage: Unreviewed | Has_patch: 0
Needs_docs: 0 | Needs_tests: 0
Needs_better_patch: 0 |
---------------------------------------------------+------------------------
Changes (by offmessage):
* status: closed => reopened
* resolution: fixed =>
Comment:
I'm afraid this one isn't quite fixed. If the ''very first'' database
operation on a connection is a {{{save()}}} you still get the error
reporting in #10474: {{{syntax error at or near "RETURNING"}}}. It looks
like the test for PostgreSQL version is only done at the point a query is
issued. I'm afraid I'm new to Django and haven't been able to propose a
patch.
Simple test case:
{{{
>>> from django.db import connection
>>> connection.features.can_return_id_from_insert
True
>>> connection._version
Traceback (most recent call last):
File "<console>", line 1, in ?
AttributeError: 'DatabaseWrapper' object has no attribute '_version'
>>> from test.test.models import TestCase
>>> t = TestCase(teststring="hello")
>>> t.save()
Traceback (most recent call last):
File "<console>", line 1, in ?
File
"/home/andy/projects/django10474/code/django/django/db/models/base.py",
line 330, in save
self.save_base(force_insert=force_insert, force_update=force_update)
File
"/home/andy/projects/django10474/code/django/django/db/models/base.py",
line 402, in save_base
result = manager._insert(values, return_id=update_pk)
File
"/home/andy/projects/django10474/code/django/django/db/models/manager.py",
line 168, in _insert
return insert_query(self.model, values, **kwargs)
File
"/home/andy/projects/django10474/code/django/django/db/models/query.py",
line 1054, in insert_query
return query.execute_sql(return_id)
File
"/home/andy/projects/django10474/code/django/django/db/models/sql/subqueries.py",
line 320, in execute_sql
cursor = super(InsertQuery, self).execute_sql(None)
File
"/home/andy/projects/django10474/code/django/django/db/models/sql/query.py",
line 2098, in execute_sql
cursor.execute(sql, params)
File
"/home/andy/projects/django10474/code/django/django/db/backends/util.py",
line19, in execute
return self.cursor.execute(sql, params)
ProgrammingError: syntax error at or near "RETURNING" at character 63
}}}
and
{{{
>>> from django.db import connection
>>> connection.features.can_return_id_from_insert
True
>>> from test.test.models import TestCase
>>> TestCase.objects.all()
[]
>>> connection._version
(8, 1)
>>> connection.features.can_return_id_from_insert
False
>>> t = TestCase(teststring="hello")
>>> t.save()
>>>
}}}
--
Ticket URL: <http://code.djangoproject.com/ticket/10467#comment:4>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---