PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Converter arquivo de despejo SQLITE SQL para POSTGRESQL


Você deve ser capaz de alimentar esse arquivo de despejo diretamente no psql :
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql

Se você quiser o id coluna para "incremento automático" e altere seu tipo de "int" para "serial" na linha de criação da tabela. O PostgreSQL anexará uma sequência a essa coluna para que os INSERTs com ids NULL sejam atribuídos automaticamente ao próximo valor disponível. O PostgreSQL também não reconhecerá AUTOINCREMENT comandos, então estes precisam ser removidos.

Você também vai querer verificar datetime colunas no esquema SQLite e altere-as para timestamp para PostgreSQL. (Obrigado a Clay por apontar isso.)

Se você tiver booleanos em seu SQLite, poderá converter 1 e 0 para 1::boolean e 0::boolean (respectivamente) ou você pode 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, convém ajustar o esquema para usar bytea . Você provavelmente precisará misturar algum decode chama também. Escrever uma copiadora rápida e suja em seu idioma favorito pode ser mais fácil do que desmontar o SQL se você tiver muitos BLOBs para lidar.

Como de costume, se você tiver chaves estrangeiras, provavelmente desejará examinar set constraints all deferred para evitar problemas de ordenação de inserção, colocando o comando dentro do par BEGIN/COMMIT.

Obrigado a Nicolas Riley pelas notas booleanas, blob e restrições.

Se você tiver ` em seu código, conforme gerado por alguns clientes SQLite3, você precisa removê-los.

PostGRESQL também não reconhece unsigned colunas, então você pode querer descartar isso ou adicionar uma restrição personalizada como esta:
CREATE TABLE tablename (
    ...
    unsigned_column_name integer CHECK (unsigned_column_name > 0)
);

Enquanto o SQLite padroniza valores nulos para '' , o PostgreSQL requer que eles sejam definidos como NULL .

A sintaxe no arquivo de despejo do SQLite parece ser compatível principalmente com o PostgreSQL, então você pode corrigir algumas coisas e alimentá-lo para psql . Importar uma grande pilha de dados por meio de SQL INSERTs pode demorar um pouco, mas funcionará.