我正在尝试按照描述的步骤将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')),
],
),
...
...
...接下来,我注释了uuid字段中存在AlterTable的所有AlterTable文件,但是当我运行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...发布于 2018-08-28 12:59:23
我知道哪里出错了。问题是在postgre表方案:'id‘字段有’整数‘类型,而不是'uuid’。我将其转换为“uuid”,导入成功。
发布于 2018-08-27 14:38:27
我认为这里的问题是,在更改使用int之前,有一些旧迁移将AutoField() PK字段列作为UUIDField()引用。
您可能需要保留id字段,因为它是(可能将迁移回到生成swithc的点),并在Report模型中包含一个名为uuid的新字段(因此是uuid类型的列):
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')
...然后重新运行数据库迁移..。您可能会遇到更多的迁移错误,但是让我大喊一声,我可以在聊天中向您建议从哪里开始。
https://stackoverflow.com/questions/52041430
复制相似问题