Django переход на PostgreSQL не может импортировать данные, слишком долго указав данные - PullRequest
3 голосов
/ 04 марта 2010

Я переключаюсь с использования SQLite3 на PostgreSQL и надеялся, что смогу заполнить базу данных, используя приспособления, которые я использовал для заполнения SQLite3. Тем не менее, я получаю эти ошибки:

$ python manage.py loaddata fixtures/core.json fixtures/auth.json

Installing json fixture 'fixtures/core' from absolute path.
Problem installing fixture 'fixtures/core.json': Traceback (most recent call last):
  File "/home/mvid/webapps/nihl/nihlapp/django/core/management/commands/loaddata.py", line 153, in handle
    obj.save()
  File "/home/mvid/webapps/nihl/nihlapp/django/core/serializers/base.py", line 163, in save
    models.Model.save_base(self.object, raw=True)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/models/base.py", line 495, in save_base
    result = manager._insert(values, return_id=update_pk)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/models/manager.py", line 177, in _insert
    return insert_query(self.model, values, **kwargs)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/models/query.py", line 1087, in insert_query
    return query.execute_sql(return_id)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/models/sql/subqueries.py", line 320, in execute_sql
    cursor = super(InsertQuery, self).execute_sql(None)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/models/sql/query.py", line 2369, in execute_sql
    cursor.execute(sql, params)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/backends/util.py", line 19, in execute
    return self.cursor.execute(sql, params)
DataError: value too long for type character varying(30)

Я никогда не получал ошибок длины данных и не менял модели между переключателями базы данных. PostgreSQL работает с utf8. Есть ли способ увидеть, какие именно значения json не подходят, чтобы я мог обновить соответствующие модели? Любая идея о том, почему значения работали в SQLite, но терпят неудачу в PostgreSQL?

Ответы [ 4 ]

3 голосов
/ 04 марта 2010

Sqlite не устанавливает длину varchar (n). Из FAQ по sqlite:

http://www.sqlite.org/faq.html#q9

3 голосов
/ 04 марта 2010

Проверьте файл журнала Postgres, он запишет полный сбой оператора SQL, включая имя таблицы и значение строки, вызвавшей ошибку.

1 голос
/ 04 марта 2010

Чтобы решить актуальную проблему, измените вашу декларацию на текст. Это позволит вам импортировать ваши данные и очистить их. Затем вы можете повторно применить ограничение.

0 голосов
/ 04 марта 2010

Проверьте длину данных из SQLLite внутри fixtures / core.json, которые вы пытаетесь вставить в Postgres. Похоже, данные превышают 30 символов длины. Проверьте вашу модель django на свойство, которое ограничено 30 символами, затем проверьте свои приборы на данные, которые превышают эту максимальную длину.

...