Vamos supor que precisamos importar para a tabela "tb_esporte" os dados do arquivo "'C:/temp/arq_esporte.csv'". Conforme imagem a seguir:
Arquivo: arq_esporte.csv
Para importar o arquivo utilizamos o comando sql COPY e o arquivo deve estar armazenado no servidor do banco de dados.
Caso você precise acessar remotamente um arquivo, ou seja, o arquivo está em uma outra máquina você deve utilizar o comando psql \copy. Acesse o link em:
COPY tb_esporte
(
id,
esporte_desc,
disponibilidade
)
FROM 'C:/temp/arq_esporte.csv'
DELIMITER ';'
CSV HEADER;
Significado:
Para visualizar a tabela com os dados importados execute um select:
- COPY: comando utilizado para importar a tabela;
- tb_esporte: nome da tabela que receberá os dados;
- (...): dentro do parenteses colocamos as colunas que receberão os dados. Neste caso, utilizamos as colunas id, esporte_desc e disponibilidade;
- FROM: após o "FROM" devemos colocar o diretório que está localizado o arquivo. O diretório sempre deve usar "/", nunca "\", tanto para Windows quanto para Linux. O arquivo que será importado tem a extensão csv, também poderiamos importar um arquivo com a extensão "txt";
- DELIMITER: após o delimiter devemos colocar o separador que o arquivo utiliza. O separador poder ser ";", ",", "|" entre outros. Neste caso, o separador do arquivo é ";" ;
- CSV HEADER: utilize "CSV HEADER" caso não queira importar a primeira linha. Para este arquivo não importamos a primeira linha, pois é o cabeçalho;
Para visualizar a tabela com os dados importados execute um select:
SELECT * FROM tb_esportes;
Veja o resultado na imagem abaixo.
Possíveis problemas com a codificação
Se a codificação do arquivo for diferente do seu banco, pode ocorrer um erro e o seu arquivo não ser importado. Exemplo: se o seu arquivo tiver a codificação "ANSI" e o da sua tabela tiver a codificação "UTF-8". A mensagem de erro exibida será:
ERRO: sequência de bytes é inválida para codificação "UTF8": 0xe7e36f
Para resolver este erro você poder salvar o arquivo com a codificação "UTF-8". No campo "tipo" escolha a codificação "UTF-8" e depois pressione o botão Salvar. Veja a imagem abaixo.
para importa a partir da linha 3 e parar na coluna 4? total de coluna no arquivo é 8!
ResponderExcluirEste comentário foi removido pelo autor.
ExcluirSe seu arquivo tem 8 colunas e você quer importar da 1ª a 4ª coluna e a partir da 3ª linha você pode criar uma tabela temporária antes de importar para a tabela que você precisa (definitiva):
ExcluirVamos chamar a tabela temporária de tb_tmp.
Vamos chamar a tabela definitiva de tb_definitiva.
Vamos chamar o arquivo de teste.csv:
v1;v2;v3;v4;v5;v6;v7;v8
87;24;48;10;20;11;87;10
52;42;46;14;30;10;92;10
95;50;42;24;40;21;37;10
63;10;40;36;50;31;94;10
42;14;38;40;60;41;27;10
71;16;36;45;70;51;92;10
59;18;34;57;80;61;57;10
91;20;32;59;90;71;93;10
85;22;30;62;10;81;17;10
99;24;28;67;12;14;12;10
1º) Vamos criar a tabela temporária com 9 colunas:
*8 colunas para importar os dados do arquivo;
*1 coluna para criar índice sequencial para as linhas (1, 2,3), que permitirá a localização das linhas (registros).
O comando a seguir cria tabela temporária:
CREATE TEMPORARY TABLE tb_tmp
(
indice SERIAL,
c_1 INTEGER,
c_2 INTEGER,
c_3 INTEGER,
c_4 INTEGER,
c_5 INTEGER,
c_6 INTEGER,
c_7 INTEGER,
c_8 INTEGER
);
2º) Vamos importar os dados do arquivo para a tabela temporária:
COPY tb_tmp
(
c_1,
c_2,
c_3,
c_4,
c_5,
c_6,
c_7,
c_8
)
FROM '/tmp/teste.csv'
DELIMITER ';'
CSV HEADER;
3º) Após importamos os dados para a tabela "tb_tmp", podemos exibir os dados através do comando:
SELECT * FROM tb_tmp
indice | c_1 | c_2 | c_3 | c_4 | c_5 | c_6 | c_7 | c_8
--------+-----+-----+-----+-----+-----+-----+-----+-----
1 | 87 | 24 | 48 | 10 | 20 | 11 | 87 | 10
2 | 52 | 42 | 46 | 14 | 30 | 10 | 92 | 10
3 | 95 | 50 | 42 | 24 | 40 | 21 | 37 | 10
4 | 63 | 10 | 40 | 36 | 50 | 31 | 94 | 10
5 | 42 | 14 | 38 | 40 | 60 | 41 | 27 | 10
6 | 71 | 16 | 36 | 45 | 70 | 51 | 92 | 10
7 | 59 | 18 | 34 | 57 | 80 | 61 | 57 | 10
8 | 91 | 20 | 32 | 59 | 90 | 71 | 93 | 10
9 | 85 | 22 | 30 | 62 | 10 | 81 | 17 | 10
10 | 99 | 24 | 28 | 67 | 12 | 14 | 12 | 10
4º) Inserir os dados da tabela temporária "tb_tmp" na tabela definitiva "tb_definitiva"
Vamos supor que a "tb_definitiva" possui a seguinte estrutura:
CREATE TABLE tb_definitiva
(
d_1 INTEGER,
d_2 INTEGER,
d_3 INTEGER,
d_4 INTEGER
);
Agora vamos utilizar o comando "INSERT SELECT" para inserir os dados que interessam na tabela "tb_definitiva", ou seja da 1ª a 4ª coluna a partir da terceira linha (índice maior ou igual a 3);
INSERT INTO tb_definitiva (d_1, d_2, d_3, d_4)
SELECT c_1, c_2, c_3, c_4 FROM tb_tmp
WHERE INDICE >=3;
5º) Após executar o comando "INSERT SELECT" veja como ficou a tabela "tb_definitiva":
SELECT * FROM tb_definitiva;
d_1 | d_2 | d_3 | d_4
-----+-----+-----+-----
95 | 50 | 42 | 24
63 | 10 | 40 | 36
42 | 14 | 38 | 40
71 | 16 | 36 | 45
59 | 18 | 34 | 57
91 | 20 | 32 | 59
85 | 22 | 30 | 62
99 | 24 | 28 | 67
Este comentário foi removido pelo autor.
ResponderExcluirMuito obrigado pela ajuda!!!!
ResponderExcluirolá
ResponderExcluircomo eu faço para saber se o arquivo que eu vou importar, existe?
olá
ResponderExcluircomo eu faço para saber se o arquivo que eu vou importar, existe?
Como faço para inserir dados de um arquivo com formato (.tar) em uma tabela do postgresql ???
ResponderExcluircomo corrigir invalid input syntax for integer: "01"
ResponderExcluircomando copy nao consegue encontrar o arquivo e da erro
ResponderExcluirTenho um arquivo txt e quero o importar para o postgres porem estou tendo dificuldade
ResponderExcluirtenho o arquivo de layout dele exemplo:
Coluna,Tamanho,Inicio,Fim,Tipo
CO_PROCEDIMENTO,10,1,10,VARCHAR
NO_PROCEDIMENTO,250,11,260,VARCHAR
No arquivo de layout ele diz que essa coluna tem 10 caracteres do caracter 1 ao 10 e o tipo e varchar, assim como os demais campos.
consegui criar as tabelas no postgree, porem não estou conseguindo importar o txt que não tem cabeçalho. Ex:
0101010010ATIVIDADE EDUCATIVA / ORIENTAÇÃO EM GRUPO NA ATENÇÃO BÁSICA 1N9999999900009999999900000000000000000000000000000001 9999201908
0101010028ATIVIDADE EDUCATIVA / ORIENTAÇÃO EM GRUPO NA ATENÇÃO ESPECIALIZADA 2I9999999900000084157100000000000000000270000000000006 9999201908
0101010036PRÁTICA CORPORAL / ATIVIDADE FÍSICA EM GRUPO 1I9999999900000072157100000000000000000000000000000001 9999201908
0101020015AÇÃO COLETIVA DE APLICAÇÃO TÓPICA DE FLÚOR GEL
como faço para dar carga dessa tabela separando os caracteres?