Code

Opened 7 years ago

Closed 6 years ago

#5578 closed (worksforme)

Can't import fixtures generated using mysql into postgresql

Reported by: django@… Owned by: nobody
Component: Database layer (models, ORM) Version: master
Severity: Keywords: postgresql mysql case sensitive sensitivity fixture load
Cc: mir@… Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description (last modified by ubernostrum)

Fixtures generated using an app running against mysql can't be imported by that same app if switched to run against postgresql. This appears to have to do with different handling of mixed case table/column names in django's drivers for the two databases.

Here's the error I get. The same error occurs regardless of fixture format. Note the case difference between spackle1_projecttemplate_subjectareas (from the exception) and spackle1_projecttemplate_subjectAreas (from the sql):

Loading 'spackle1/fixtures/spackle1' fixtures...
Installing xml fixture 'spackle1/fixtures/spackle1' from absolute path.
Traceback (most recent call last):
  File "./manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/lib/python2.5/site-packages/django/core/management/__init__.py", line 264, in execute_manager
    utility.execute()
  File "/usr/lib/python2.5/site-packages/django/core/management/__init__.py", line 215, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python2.5/site-packages/django/core/management/base.py", line 70, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/lib/python2.5/site-packages/django/core/management/base.py", line 84, in execute
    output = self.handle(*args, **options)
  File "/usr/lib/python2.5/site-packages/django/core/management/commands/loaddata.py", line 119, in handle
    cursor.execute(line)
  File "/usr/lib/python2.5/site-packages/django/db/backends/util.py", line 19, in execute
    return self.cursor.execute(sql, params)
  File "/usr/lib/python2.5/site-packages/django/db/backends/postgresql/base.py", line 47, in execute
    return self.cursor.execute(smart_str(sql, self.charset), self.format_params(params))
psycopg.ProgrammingError: ERROR:  relation "spackle1_projecttemplate_subjectareas" does not exist

SELECT setval('"spackle1_projecttemplate_subjectAreas_id_seq"', coalesce(max("id"), 1), max("id") IS NOT null) FROM spackle1_projecttemplate_subjectAreas;

Attachments (0)

Change History (4)

comment:1 Changed 7 years ago by ubernostrum

  • Description modified (diff)
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

(cleaning up formatting in description)

comment:2 Changed 7 years ago by mir

  • Cc mir@… added

comment:3 Changed 7 years ago by Simon G <dev@…>

  • Triage Stage changed from Unreviewed to Accepted

comment:4 Changed 6 years ago by jason

  • Resolution set to worksforme
  • Status changed from new to closed

This does not appear to be a bug anymore. The default table name is app_label + '_' + module_name, where module_name is the lowercase object_name. Further, the table name in this example is not quoted, however in the latest trunk it is quoted, so if db_table is set to a name with upper-casing, the code still works.

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
as The resolution will be set. Next status will be 'closed'
The resolution will be deleted. Next status will be 'new'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.