Некоторые проблемы с UUID при миграции с SQLite на Postgresql в Django 2.0 - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь перенести мой проект Django 2.0.4 из SQLite в PostgreSQL 10, выполнив шаги, описанные здесь , но у меня возникают другие проблемы. Во время проекта я изменил некоторые поля Integer на поля UUID4. Мне удалось запустить python manage.py migrate --run-syncdb ручное редактирование auto_increment файла миграции с внесением изменений этого типа (см. Поле id): От

class Migration(migrations.Migration):

    dependencies = [
        ('dumps', '0011_auto_20180608_1714'),
    ]

    operations = [
        migrations.CreateModel(
            name='Report',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('data', models.DateTimeField(auto_now_add=True, verbose_name='Date')),
            ],
        ),
        ...
        ...
        ...

К

class Migration(migrations.Migration):

    dependencies = [
        ('dumps', '0011_auto_20180608_1714'),
    ]

    operations = [
        migrations.CreateModel(
            name='Report',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')),
                ('data', models.DateTimeField(auto_now_add=True, verbose_name='Date')),
            ],
        ),
        ...
        ...
        ...

Далее я прокомментировал все файлы auto_increment, в которых была AlterTable для полей uuid, но когда я запускаю python manage.py loaddata datadump.json, я получаю следующую ошибку:

django.db.utils.ProgrammingError: Problem installing fixture 'C:\Users\djangoproject\datadump.json': Could not load myApp.Reservation(pk=10d00b08-bf35-469f-b53f-ec28f8b6ecb3): ERROR:  column "reservation_id" is integer type but the expression is uuid type
LINE 1: UPDATE "myApp_reservation" SET "reservation_id" = '066cff3c-4b...

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Я понял, где была ошибка. Проблема была в схеме таблицы postgre: поле 'id' имело тип 'integer' вместо 'uuid'. Я преобразовал его в 'uuid', и импорт прошел успешно.

0 голосов
/ 27 августа 2018

Я думаю, что проблема заключается в том, что у вас есть старые миграции, которые ссылаются на столбец поля int PK как AutoField() до того, как вы внесли изменение для использования UUIDField().

Возможно, вам придется оставить поле id таким, каким оно было (возможно, откатить ваши миграции обратно к точке, в которой был выполнен swithc), и включить новое поле (и, следовательно, столбец типа uuid) с именем uuid в вашей Report модели:

class Report(models.Model)

    id = models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, serialize=False, verbose_name='UUID')
    data = models.DateTimeField(auto_now_add=True, verbose_name='Date')
    ...

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

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