Opened 10 years ago

Closed 10 years ago

Last modified 5 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: master
Severity: Keywords: loaddata dumpdata postgresql
Cc: gary.wilson@…, real.human@…,…, 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:


I did a ( 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


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/ 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@… 10 years ago.
Patch against revision 6468 to fix postgresql m2m loaddata problem

Download all attachments as: .zip

Change History (5)

Changed 10 years ago by davep@…

Attachment: operations_py.patch added

Patch against revision 6468 to fix postgresql m2m loaddata problem

comment:1 Changed 10 years ago by davep@…

Cc: gary.wilson@… real.human@…… 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 Changed 10 years ago by Chris Beaven

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 Changed 10 years ago by Gary Wilson

Resolution: fixed
Status: newclosed

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

comment:5 Changed 5 years ago by Aymeric Augustin

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

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