Você deve ser capaz de alimentar esse arquivo de despejo diretamente em psql
:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
Se você quiser que a id
coluna tenha um "incremento automático", altere seu tipo de "int" para "serial" na linha de criação da tabela. O PostgreSQL irá então anexar uma sequência àquela coluna para que INSERTs com ids NULL sejam automaticamente atribuídos ao próximo valor disponível. O PostgreSQL também não reconhecerá os AUTOINCREMENT
comandos, portanto, eles precisam ser removidos.
Você também vai querer verificar as datetime
colunas no esquema SQLite e alterá-las timestamp
para PostgreSQL (obrigado a Clay por apontar isso).
Se você tiver booleanos em seu SQLite, poderá converter 1
e 0
e 1::boolean
e 0::boolean
(respectivamente) ou alterar a coluna booleana para um inteiro na seção de esquema do dump e corrigi-los manualmente dentro do PostgreSQL após a importação.
Se você tiver BLOBs em seu SQLite, você desejará ajustar o esquema a ser usado bytea
. Provavelmente, você também precisará misturar algumas decode
chamadas . Escrever uma copiadora rápida e suja em sua linguagem favorita pode ser mais fácil do que mutilar o SQL se você tiver muitos BLOBs para lidar.
Como de costume, se você tiver chaves estrangeiras, provavelmente desejará set constraints all deferred
evitar problemas de ordem de inserção, colocando o comando dentro do par BEGIN / COMMIT.
Agradecimentos a Nicolas Riley pelas notas booleanas, de bolhas e de restrições.
Se você tiver `
em seu código, conforme gerado por alguns clientes SQLite3, será necessário removê-los.
PostGRESQL também não reconhece unsigned
colunas, você pode querer descartar isso ou adicionar uma restrição feita sob medida, como esta:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Embora o padrão do SQLite para valores nulos ''
, o PostgreSQL requer que eles sejam configurados como NULL
.
A sintaxe no arquivo de despejo SQLite parece ser compatível com o PostgreSQL, portanto, você pode corrigir algumas coisas e alimentá-lo psql
. A importação de uma grande pilha de dados por meio de SQL INSERTs pode demorar um pouco, mas funcionará.