Importar arquivo CSV em tabela PostgreSQL
Neste tutorial, vamos importar um arquivo CSV, e fazer a inserção dos dados contidos no csv em uma tabela utilizando o banco de dados postgres.
Entendendo o arquivo csv
Para melhor entendimento do que será feito, vamos analisar as 5 primeiras linhas do arquivo. Isso vai servir para a gente gerar o modelo de dados (a tabela) correspondente ao arquivo.
Rank,Name,Platform,Year,Genre,Publisher,NA_Sales,EU_Sales,JP_Sales,Other_Sales,Global_Sales
1,Wii Sports,Wii,2006,Sports,Nintendo,41.49,29.02,3.77,8.46,82.74
2,Super Mario Bros.,NES,1985,Platform,Nintendo,29.08,3.58,6.81,0.77,40.24
3,Mario Kart Wii,Wii,2008,Racing,Nintendo,15.85,12.88,3.79,3.31,35.82
4,Wii Sports Resort,Wii,2009,Sports,Nintendo,15.75,11.01,3.28,2.96,33
Esse CSV é um conjunto de dados de venda de jogos de video game. Vamos então montar como seria uma tabela correspondente a este modelo de dados.
A primeira linha do CSV é o cabeçalho, a partir da segunda linha temos os dados que serão inseridos na tabela.
Uma entidade no modelo relacional que representa estes dados é a seguinte:
Um script SQL que representa esta estrutura é a seguinte:
CREATE TABLE videogamesale (
id SERIAL PRIMARY KEY,
rank INTEGER,
name VARCHAR(150),
platform VARCHAR(100),
year VARCHAR(4),
genre VARCHAR(100),
publisher VARCHAR(100),
na_sales FLOAT,
jp_sales FLOAT,
eu_sales FLOAT,
other_sales FLOAT,
global_sales FLOAT
);
Importe um CSV para uma tabela usando o comando COPY
Para importar o csv com o comando copy, é só utilizar o seguinte comando:
\COPY videogamesale(rank, name, platform, year, genre, publisher, na_sales, jp_sales, eu_sales, other_sales, global_sales)
FROM '/caminho/para/csv/vgsales.csv'
DELIMITER ','
CSV HEADER;
Após importar o arquivo com sucesso, aparece a seguinte mensagem no console.
COPY 16598
Isso mostra que foi feito a importação do arquivo com sucesso, e que 16598 linha foram importadas.
Repare que no comando acima foi utilizando o caractere contra-barra (\), para executar o comando, se por acaso você utilizar o comando sem a contra-barra então ocorrerá a seguinte mensagem de erro:
ERROR: could not open file "..." for reading: Permission denied
HINT: COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \copy.
Foi utilizado o comando \copy
, para mais informações veja a documentação.