Вызов django loaddata ProgrammingError: «...» не является последовательностью при загрузке длинного имени таблицы в postgresql - PullRequest
0 голосов
/ 11 января 2011

Я загружаю приспособление, сгенерированное из sqlite, в базу данных postgresql, используя manage.py loaddata.Загрузка не удалась, когда она достигает ManyToManyField с длинным именем.

Я проследил в адаптер базы данных: usr/local/lib/python2.6/dist-packages/django/db/backends/postgresql_psycopg2/base.py строка 44

return self.cursor.execute(query, args)

правильное значение query: 'SELECT CURRVAL(\'"a_long_long_table_name_id_seq"\')'

но затем произошла ошибка с DatabaseError: «a_long_long_table_name_i» не является последовательностью

Очевидно, что имя обрезается после выполнения этого оператора, но я не могу отследить глубже.

версия django: 1.2

Как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2011

Вы знаете, что вы можете использовать ярлыки приложений и db_table, чтобы конкретно указать базе данных, какое имя следует использовать в качестве имени таблицы, верно?Это означает, что вам не нужно сокращать имена моделей, но держать их описательными.

Насколько я знаю, Postgres будет усекать имя таблицы базы данных (и полей) при создании, используяфункция, которая всегда будет давать одно и то же имя.Это должно означать, что нужно модифицировать только приборы.Определите фактическое имя в Postgres и найдите замену в данных прибора.

0 голосов
/ 03 апреля 2011

Я нашел ответ от http://archives.postgresql.org/pgsql-novice/2003-06/msg00239.php, Имя таблицы postgres имеет максимальный предел 63. Чтобы увеличить этот предел, нужно изменить его исходный код и установить для NAMEDATALEN более высокое значение.Но проблема в том, что в django действительно легко превысить этот предел, потому что имена таблиц ассоциации для полей многие ко многим обычно имеют следующий формат: application_name_model1_name_model2_name

В любом случае, я решил сократить модельимена и не перекомпилировать исходный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...