Перво-наперво, я бы попробовал просто:
sqlite3 sqllitedb .dump | psql postgresdb
В этот момент просто протестируйте его.Напишите несколько тестовых сценариев в Django, чтобы вывести набор образцов записей для каждого приложения, а затем выполните diff, чтобы убедиться, что они идентичны.Если это так, то ваше преобразование, вероятно, в порядке.
Если это не сработает ...
Я бы рекомендовал не использовать Django для выгрузки и загрузки данных, поскольку япредполагаю, что это не оптимизировано для этого.
Вместо этого я бы создал вторую версию вашего приложения с правильными настройками базы данных PostgreSQL, запустил syncdb для создания всех таблиц, а затем скопировал данные из mysqllite в PostgreSQLиспользуя какой-то другой инструмент.
Дело в том, что большинство проблем при преобразовании данных заключается в определениях таблиц и т. д. Они кажутся наиболее специфическими.Если вы можете сгенерировать сценарий SQL, который представляет собой дамп только содержимого таблицы, то это должны быть довольно стандартные команды SQL INSERT INTO
.
Честно говоря, я не понимаю, почему могут возникнуть проблемы с внешним ключом.Если предположить, что sqlite создает точные внешние ключи (а почему бы и нет?), То нет способа, который бы правильно копировал.Действительно, внешние ключи не являются специальными формами данных.Скорее всего, поле UserProfile.user_id
будет содержать неправильное значение, чем поле UserProfile.photo
.Если проблема с внешним ключом заключается в том, что сами поля неправильно определены как поля внешнего ключа (то есть без ограничений), то вариант первого создания базы данных с использованием syncdb
решит эту проблему.
Согласноусечение: насколько я понимаю, PostgreSQL выдает серьезную ошибку, если данные собираются урезать.Я не знаю, так ли это с sqlite или он просто усекается молча.В любом случае, опять-таки, предполагая, что sqlite каким-то образом не манипулирует данными при экспорте, поля должны содержать данные, которые имеют правильную длину для поля, в которое они входят. Единственное, что я могу подумать, это может повлиять на это - кодировка символов, поэтомуубедитесь, что поля PostgreSQL имеют ту же кодировку, что и таблицы sqlite, по крайней мере во время импорта.