Estou usando o SQLiteStudio 3.0.7 para despejar o esquema do banco de dados regularmente para fins de controle de versão e parece alterar a ordem das definições da tabela aleatoriamente. Isso causa estragos nas diferenças, pois mesmo uma pequena mudança, como adicionar uma ou duas colunas adicionais, parece resultar em diferenças selvagens em todo o lugar. Uma comparação lado a lado pode resultar em uma tabela inteira sendo listada separadamente quando é apenas a diferença de linha que deve aparecer.
O SQLiteStudio pode ser configurado para fazer isso corretamente ou o próprio sqlite pode fazer a mesma exportação de esquema de maneira formatada fixa?
O SQLiteStudio classifica os objetos do banco de dados por tipo (tabela, índice, gatilho, exibição), mas dentro de cada grupo, os classifica aleatoriamente. (Se você considera isso um bug, denuncie.)
O
sqlite3
shell despeja as tabelas na ordem em que são armazenadas nasqlite_master
tabela, que normalmente é a mesma ordem em que foram (re)criadas.Para obter uma saída de despejo de esquema consistentemente classificada, talvez você queira processar manualmente a saída. Fiz um pequeno script auxiliar para esse fim:
Faz o que eu quero, sem garantia de correção. A ordem das colunas de cada tabela respectiva, entretanto, ainda pode variar.