mygems

Converter um CSV em comandos SQL INSERT

Entra um CSV, sai um script .sql que qualquer banco executa.

  • PostgreSQL, MySQL, SQLite
  • Tipos de coluna detectados
  • Aspas escapadas corretamente
  • Nada é enviado

1.Abrir o arquivo

CSV ou TSV. Arraste para cá ou escolha um arquivo.

Por que existe

Os assistentes de importação dos bancos de dados são chatos com CSV, e os carregadores de linha de comando exigem acesso a arquivos que o servidor do banco muitas vezes não tem. Um script .sql simples funciona em qualquer lugar onde uma consulta funciona. Gerá-lo à mão, porém, é onde as aspas dão errado: um apóstrofo num sobrenome quebra o script inteiro, e uma barra invertida sem escape corrompe uma linha no MySQL. Aqui o script sai com o escape que cada banco realmente exige.

O que ele faz

  • Gera um CREATE TABLE com um tipo para cada coluna, decidido a partir de todos os valores dela.
  • Grava as linhas como INSERT de várias linhas, em lotes do tamanho que você escolher.
  • Coloca aspas nos nomes e escapa os valores conforme o banco escolhido, inclusive as barras invertidas do MySQL.
  • Grava células vazias como NULL e mantém como texto as colunas com zeros à esquerda ou números muito longos.
  • Pode envolver tudo em uma transação, para que uma falha no meio deixe o banco como estava.

Por que em lotes

Um INSERT por linha é lento de executar, e um único INSERT para um milhão de linhas é grande demais para a maioria dos servidores aceitar. Algumas centenas de linhas por comando é rápido e fica abaixo dos limites usuais de pacote e de tamanho de comando; reduza se o seu servidor reclamar.

Perguntas

Quais bancos de dados ele aceita?
PostgreSQL, MySQL e MariaDB, e SQLite. Os scripts são SQL simples, então outros bancos que seguem o padrão, como o SQL Server nos comandos INSERT, costumam aceitá-los com pequenos ajustes no CREATE TABLE.
Como os tipos das colunas são escolhidos?
A partir de todos os valores da coluna. Uma coluna de números inteiros vira BIGINT, decimais viram um tipo de ponto flutuante, verdadeiro/falso vira BOOLEAN, datas ISO viram DATE e todo o resto, inclusive números com zeros à esquerda, vira TEXT. Você pode editar o CREATE TABLE no script antes de executá-lo.
É seguro executar num banco de produção?
O script só cria uma tabela e insere nela. Leia-o antes, como qualquer script: a prévia mostra o começo, e o nome da tabela é você quem escolhe.