我们正在重写一个使用 MySQL 数据库的大型 Django 应用程序,数据库架构需要进行重大修改。我们还移植应用程序以使用 PostgreSQL,有几个很好的理由。
我写了一个小脚本,允许我将旧的 MySQL 表转储到 PostgreSQL 数据库中,在它们的名字前加上 oldapp_*
我们开始编写一些数据迁移脚本,它们基本上是:
insert into foobar(c1, c2, ..., cn)
select c1, c2, ..., cn from oldapp_foobar where ...
现在,此应用广泛使用代理键(Django 不允许复合主键并鼓励大量使用代理键)。对于第一个迁移脚本,我暂时跳过了插入/选择中的代理键,因此 PostgreSQL 会自动生成新的 ID。
这当然有效,但是在迁移外键时这不是一个好主意。我正在考虑几种方法,但我希望能在这里提供一些意见。