Abra ou cole um arquivo CSV, escolha o Banco de dados e o Comando, e o script aparece ao lado das opções. Por padrão, ele sai como uma transação do PostgreSQL com um CREATE TABLE IF NOT EXISTS de colunas TEXT e INSERTs de 100 linhas cada, então 00412 continua '00412'. Escolha Detectar números e true/false quando a tabela precisar de colunas numéricas, booleanas e DATE. A conversão acontece no seu navegador, e o arquivo nunca é enviado.
Como converter CSV em SQL
- Abra um arquivo
.csv,.tsvou.txt, arraste-o para a ferramenta ou cole as linhas. O delimitador é detectado sozinho; ajuste-o, a linha de cabeçalho ou uma codificação antiga como Windows-1252 em Configurações de importação. - Escolha o Banco de dados: PostgreSQL, MySQL / MariaDB, SQLite ou SQL Server. Confira o Nome da tabela, que começa como o nome do arquivo com espaços e pontuação trocados por sublinhados (
sales report.csvvirasales_report). - Escolha o Comando e, para UPSERT, UPDATE ou DELETE, marque as Colunas-chave que identificam cada linha.
- Revise a prévia, depois clique em Copiar ou baixe o arquivo
.sqle rode-o no seu cliente de banco de dados, por exemplo compsql -f data.sql.
Para gerar scripts de muitos arquivos com as mesmas configurações, escolha Lote: converter vários arquivos. Os arquivos são convertidos um a um, e os scripts são baixados juntos em um único ZIP.
Comandos e opções
| INSERT | Comandos INSERT INTO … VALUES com várias linhas. Linhas por INSERT define quantas linhas entram em cada comando (de 1 a 1.000, padrão 100); o SQL Server recusa mais de 1.000. |
|---|---|
| UPSERT (inserir ou atualizar) | Um comando por linha que a insere ou atualiza a linha existente com a mesma chave: ON CONFLICT (…) DO UPDATE SET … = excluded.… no PostgreSQL e no SQLite, ON DUPLICATE KEY UPDATE no MySQL e MERGE no SQL Server. A tabela de destino precisa de chave primária ou índice único nas colunas-chave. |
| UPDATE | UPDATE … SET … WHERE key = … para cada linha; as colunas-chave não são alteradas. Se todas as colunas forem chave, não há o que atualizar, e nenhum comando é gerado. |
| DELETE | DELETE FROM … WHERE key = … para cada linha. Um valor de chave vazio vira IS NULL. |
| Colunas-chave | Obrigatórias para UPSERT, UPDATE e DELETE; a ferramenta não gera nenhum desses comandos sem uma chave no WHERE. Com Adicionar CREATE TABLE, as colunas-chave viram NOT NULL e formam a PRIMARY KEY. |
| Adicionar CREATE TABLE | Vem ativada. Grava CREATE TABLE IF NOT EXISTS (CREATE TABLE simples no SQL Server ou depois de um DROP). |
| Começar com DROP TABLE IF EXISTS | Substitui uma tabela existente com o mesmo nome. Vem desativada; a tabela antiga e os dados dela se perdem quando o script roda. |
| Envolver em uma transação | Vem ativada: BEGIN; … COMMIT; (START TRANSACTION; no MySQL, BEGIN TRANSACTION; no SQL Server). |
| Gravar células vazias como NULL | Vem ativada. Desative para gravar células vazias como ''. |
Tipos de coluna e aspas
Com Manter todos os valores como texto (o padrão), toda coluna é TEXT (NVARCHAR(MAX) no SQL Server) e todo valor é um literal de string entre aspas, então zeros à esquerda, IDs longos e datas em formatos incomuns são carregados sem mudança.
Com Detectar números e true/false, uma coluna só recebe um tipo quando todos os valores preenchidos se encaixam nele:
| Números inteiros | INTEGER, ou BIGINT quando algum valor tem mais de 9 dígitos. Os valores são gravados sem aspas. Números com zeros à esquerda ou acima de 9.007.199.254.740.991 mantêm a coluna como texto. |
|---|---|
| Decimais (até 15 algarismos significativos) | NUMERIC no PostgreSQL, DECIMAL(p,s) dimensionado pelos dados no MySQL e no SQL Server, REAL no SQLite. Uma vírgula decimal, como em 1,5, mantém a coluna como texto. |
| true / false (maiúsculas ou minúsculas) | BOOLEAN com TRUE/FALSE no PostgreSQL e no MySQL, BIT com 1/0 no SQL Server, INTEGER com 1/0 no SQLite. |
| Datas no formato AAAA-MM-DD | DATE, com valores entre aspas como '2026-03-01'; TEXT no SQLite. Data e hora juntas e outros formatos de data continuam como texto. |
- Nomes de tabela e de coluna vão entre aspas exatamente como foram escritos, então espaços, palavras reservadas e nomes em escritas não latinas funcionam:
"order date"no PostgreSQL e no SQLite, `order dateno MySQL,[order date]` no SQL Server. Caracteres de aspas dentro do nome são duplicados. - Nos valores, a aspa simples é duplicada (
O'Brienvira'O''Brien'). No MySQL, as barras invertidas também são duplicadas, porque o MySQL trata\como escape por padrão. Os literais do SQL Server recebem o prefixoN, para preservar o texto Unicode. - Quebras de linha dentro de um valor CSV entre aspas continuam dentro do literal de string do SQL.
- A maioria dos bancos de dados não armazena caracteres NUL; eles são removidos, e a ferramenta informa quantos.
Quando o script SQL não roda
- O script ficou todo em uma coluna. O delimitador foi detectado errado; defina-o em Configurações de importação e abra o arquivo de novo.
- Uma coluna numérica saiu como TEXT. Pelo menos um valor não é um número simples, por exemplo
12 kg,1,5ou007. Encontre-o no visualizador de CSV ou corrija a coluna com Limpar dados do CSV. - O UPSERT falha por falta de restrição.
ON CONFLICTeON DUPLICATE KEYsó funcionam quando a tabela de destino tem chave primária ou índice único nas colunas-chave. Crie o índice na tabela existente, ou deixe que Adicionar CREATE TABLE crie a chave. - O MySQL ou o SQL Server recusa a PRIMARY KEY. Uma coluna-chave que continua como texto é criada como
TEXT(MySQL/MariaDB) ouNVARCHAR(MAX)(SQL Server), e nenhum dos dois bancos consegue indexar esses tipos por inteiro. Crie a tabela você mesmo com uma chaveVARCHARe depois desative Adicionar CREATE TABLE. - O SQL Server avisa que a tabela já existe. Os scripts para SQL Server usam
CREATE TABLEsimples. Desative Adicionar CREATE TABLE para carregar na tabela existente, ou ative Começar com DROP TABLE IF EXISTS para substituí-la. - O script para no meio. O erro do banco de dados aponta o comando que falhou; as causas mais comuns são chave duplicada ou um valor que não cabe no tipo de coluna de uma tabela existente. Confira o arquivo com Validar CSV e rode o script de novo.
Arquivos grandes e limites
Arquivos de até 25 MB, 100.000 linhas ou 2 milhões de células abrem com prévia ao vivo. Arquivos maiores são convertidos em modo de streaming: a prévia mostra as primeiras 200 linhas, o arquivo é lido duas vezes, em partes (uma para descobrir os tipos e as larguras das colunas, outra para gravar o script), e o download cobre todas as linhas. Cada script tem limite de 4 GB.
A conversão roda em um worker em segundo plano nesta aba, então a página continua respondendo e Cancelar interrompe o processo. O CSV nunca é enviado a um servidor. Para receber um arquivo de banco de dados pronto em vez de um script, use CSV para SQLite.
Exemplo: uma lista de clientes como INSERTs do PostgreSQL
Uma lista de clientes com um ID que começa em zero, um nome com apóstrofo e vírgula e um plano vazio, convertida com as configurações padrão e o nome de tabela customers. Com Detectar números e true/false, signup_date vira DATE, monthly_fee vira NUMERIC com 29.00 sem aspas e active vira BOOLEAN com TRUE/FALSE, enquanto customer_id continua TEXT.
customer_id,name,signup_date,plan,monthly_fee,active 00412,"O'Brien, Kate",2026-03-01,pro,29.00,true 00413,Luis Ortega,2026-03-04,,0,false
BEGIN;
CREATE TABLE IF NOT EXISTS "customers" (
"customer_id" TEXT,
"name" TEXT,
"signup_date" TEXT,
"plan" TEXT,
"monthly_fee" TEXT,
"active" TEXT
);
INSERT INTO "customers" ("customer_id", "name", "signup_date", "plan", "monthly_fee", "active") VALUES
('00412', 'O''Brien, Kate', '2026-03-01', 'pro', '29.00', 'true'),
('00413', 'Luis Ortega', '2026-03-04', NULL, '0', 'false');
COMMIT;Perguntas frequentes
Por que toda coluna sai como TEXT por padrão?
O CSV não tem tipos, e um palpite errado faz perder dados: um ID como 00412 guardado como inteiro vira 412. Como texto, a tabela recebe exatamente o que está no arquivo. Escolha Detectar números e true/false quando quiser colunas numéricas, booleanas e DATE.
Em quais bancos de dados o script roda?
PostgreSQL, MySQL e MariaDB, SQLite e SQL Server, cada um com suas próprias regras de aspas nos identificadores, escape de strings, valores booleanos e sintaxe de upsert. Escolha o Banco de dados certo antes de baixar; um script gerado para um não serve para os outros.
Dá para gerar comandos COPY ou LOAD DATA em vez de INSERTs?
Não. O script usa comandos INSERT, UPSERT, UPDATE ou DELETE padrão. Para cargas muito grandes, considere a ferramenta de carga em massa do próprio banco, como COPY no PostgreSQL ou LOAD DATA no MySQL, lendo o CSV diretamente.