Estamos reescrevendo um grande aplicativo Django que usa um banco de dados MySQL, e o esquema do banco de dados precisa passar por grandes modificações. Também estamos transferindo o aplicativo para usar o PostgreSQL por alguns bons motivos.
Escrevi um pequeno script que me permite despejar as tabelas MySQL antigas em um banco de dados PostgreSQL, acrescentando seu nome com oldapp_*
Estamos começando a escrever alguns scripts de migração de dados que são basicamente:
insert into foobar(c1, c2, ..., cn)
select c1, c2, ..., cn from oldapp_foobar where ...
Agora, este aplicativo usa chaves substitutas extensivamente (o Django não permite chaves primárias compostas e encoraja fortemente o uso de substitutas). Para os primeiros scripts de migração, pulei provisoriamente as chaves substitutas do insert/select e, portanto, o PostgreSQL gera novos ids automaticamente.
Isso funciona, é claro, mas ao migrar chaves estrangeiras não é uma boa ideia. Estou pensando em várias abordagens, mas gostaria de receber algumas informações aqui.