Opened 16 years ago

Closed 16 years ago

Last modified 12 years ago

#5710 closed (fixed)

dumpdata/loaddata fails with many-to-many tables on postgresql

Reported by: davep@… Owned by: nobody
Component: Database layer (models, ORM) Version: dev
Severity: Keywords: manage.py loaddata dumpdata postgresql
Cc: gary.wilson@…, real.human@…, arthur.case@…, tom@…, mark@…, portland@…, floguy@…, django@…, remco@…, eliott@…, pythonmailing@… Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description

I did a (manage.py) dumpdata then loaddata with some models that had many to many fields. The subsequent loaddata operation failed with an error:

psycopg2.ProgrammingError: relation "keywordsites_site__site__keywords" does not exist.

The problem is that the name of the table is reduced to lower case where the name of the table is actually has an uppercase S

keywordsites_site__Site__keywords

and further investigation revealed that the generated SQL had the correct capitalisation but the table name was not quoted - hence the problem.

The fix is to change line 96 on django/db/backends/postgresql/operations.py to:

                output.append("%s setval('%s', coalesce(max(%s), 1), max(%s) %s null) %s \"%s\";" % \

No idea how to make a .diff, sorry, but for a single line I'm sure you can cope. It would be nice to be able to turn WikiFormatting off inline too.

Attachments (1)

operations_py.patch (552 bytes ) - added by davep@… 16 years ago.
Patch against revision 6468 to fix postgresql m2m loaddata problem

Download all attachments as: .zip

Change History (5)

by davep@…, 16 years ago

Attachment: operations_py.patch added

Patch against revision 6468 to fix postgresql m2m loaddata problem

comment:1 by davep@…, 16 years ago

Cc: gary.wilson@… real.human@… arthur.case@… tom@… mark@… portland@… floguy@… django@… remco@… eliott@… pythonmailing@… added

After critical review (thanks SmileyChris) it appears there is a qn() call to use the backend's quoting mechanism. A patch using this significantly more correct method is attached.

comment:2 by Chris Beaven, 16 years ago

Triage Stage: UnreviewedReady for checkin

This is a simple and obviously correct change so I won't ask for tests, however the committer might. You can see from the very similar code 10 lines above this change that it should be quoted.

comment:3 by Gary Wilson, 16 years ago

Resolution: fixed
Status: newclosed

(In [6507]) Fixed #5710 -- Fixed a missing table name quoting in the postgresql backend, thanks davep@….

comment:5 by Aymeric Augustin, 12 years ago

Revert spam (that I'm going to delete).

Note: See TracTickets for help on using tickets.
Back to Top