CodeGym /Cursos /SQL SELF /Usando COPY para importar dados do servidor...

Usando COPY para importar dados do servidor

SQL SELF
Nível 23 , Lição 4
Disponível

Quando seus dados já estão no servidor, você pode usar o comando COPY pra jogar eles nas tabelas do PostgreSQL. Isso é especialmente útil se você tá lidando com muita informação ou se seu servidor PostgreSQL tá rodando em outra máquina.

O comando COPY rodando do lado do servidor é super prático em projetos reais. Primeiro, ele é bem mais rápido, porque os arquivos já estão no servidor e não precisa transferir nada pela rede. Isso também deixa tudo mais seguro: não precisa copiar dados do seu computador local, então o risco de vazar informação diminui. Fora isso, dá pra colocar a importação em scripts automáticos do servidor ou serviços em background — tipo quando você precisa atualizar tabelas analíticas todo dia.

Sintaxe do comando COPY

O comando COPY é simples, mas tem uns detalhes que você precisa ficar ligado:

COPY table_name
FROM '/path/to/file.csv'
WITH (FORMAT CSV, HEADER TRUE);
  • table_name — nome da tabela onde você quer importar os dados.
  • /path/to/file.csv — caminho completo do arquivo no servidor.
  • As opções do WITH deixam você escolher o formato do arquivo, se tem cabeçalho, qual é o separador e várias outras coisas.

Exemplo de uso do comando COPY

Bora ver um exemplo rapidinho. Imagina que você precisa importar um arquivo CSV com dados de estudantes pra um banco PostgreSQL. O arquivo tá no servidor em /var/lib/postgresql/data/students.csv.

Passo 1. Tabela pros dados

Primeiro, vamos garantir que existe uma tabela no banco pra receber esses dados:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL,
    registration_date DATE
);

Essa tabela vai guardar os dados dos estudantes: nome, email e data de registro.

Passo 2. Arquivo CSV

O arquivo /var/lib/postgresql/data/students.csv pode ser assim:

id,name,email,registration_date
1,Alex Lin,alex.lin@example.com,2023-09-01
2,Maria Chi,maria.chi@example.com,2023-09-02
3,Peter Ming,peter.ming@example.com,2023-09-02

Passo 3. Comando COPY

Agora dá pra usar o COPY pra importar os dados do arquivo pra tabela:

COPY students
FROM '/var/lib/postgresql/data/students.csv'
WITH (FORMAT CSV, HEADER TRUE);

Aqui:

  • FORMAT CSV diz pro PostgreSQL que o arquivo tá no formato CSV.
  • HEADER TRUE significa que a primeira linha do arquivo tem os nomes das colunas.

Depois de rodar o comando, os dados do arquivo vão preencher a tabela students.

Conferindo o resultado

Depois de importar os dados, confere se deu tudo certo:

SELECT * FROM students;

Você vai ver as linhas do arquivo já na sua tabela:

id name email registration_date
1 Alex Lin alex.lin@example.com 2023-09-01
2 Maria Chi maria.chi@example.com 2023-09-02
3 Peter Ming peter.ming@example.com 2023-09-02

Configurando permissões de acesso

O PostgreSQL precisa ter acesso ao arquivo pra usar o comando COPY. Se as permissões estiverem erradas, você vai ver erros. Por exemplo:

ERROR:  could not open file "/var/lib/postgresql/data/students.csv" for reading: Permission denied

Pra evitar esse tipo de problema, confere o seguinte:

  1. O arquivo tá liberado pra leitura pelo usuário do PostgreSQL. Normalmente é o usuário postgres.
  2. Confere as permissões do arquivo e da pasta onde ele tá:
ls -l /var/lib/postgresql/data/students.csv

Se as permissões não estiverem boas, dá pra arrumar assim:

chmod 644 /var/lib/postgresql/data/students.csv
chown postgres:postgres /var/lib/postgresql/data/students.csv

Aqui a gente tá falando de Linux. Configurar permissões no Windows normalmente é trabalho do admin do Windows e foge do nosso curso.

Limitações do comando COPY

Trabalhar com COPY tem umas particularidades que você precisa saber:

Caminho do arquivo: sempre usa o caminho absoluto, porque o PostgreSQL pode não entender caminhos relativos.

Codificação do arquivo: se o CSV tiver uma codificação diferente do banco (tipo Windows-1251 em vez de UTF-8), tem que avisar qual é a codificação:

COPY students
FROM '/var/lib/postgresql/data/students.csv'
WITH (FORMAT CSV, ENCODING 'WIN1251', HEADER TRUE);

Erros de estrutura do arquivo: se a estrutura do arquivo não bater com a da tabela ou se os dados estiverem errados (tipo texto em campo numérico), a importação vai dar erro. Confere os dados antes de importar!

Aplicações práticas

Usar COPY pra importar dados do servidor serve pra muita coisa:

  • Migração de dados: dá pra transferir grandes volumes de dados entre servidores ou bancos diferentes.
  • Integração com sistemas externos: vários sistemas exportam dados em CSV. O COPY deixa importar rapidinho esses dados pro PostgreSQL.
  • Preparação de relatórios analíticos: importar dados automaticamente do servidor acelera a análise de grandes volumes de informação.

Erros comuns e como resolver

Quando você mexe com COPY, pode trombar com alguns erros:

Problema: Arquivo indisponível

Mensagem de erro: could not open file for reading: Permission denied.

Solução: confere se o arquivo tá liberado pro usuário do PostgreSQL (postgres) e revisa as permissões.

Problema: Formato do arquivo errado

Mensagem de erro: malformed CSV line.

Solução: olha se o arquivo tem linhas vazias, dados errados ou caracteres estranhos. Vê também se o separador tá certo.

Problema: Estrutura dos dados não bate

Mensagem de erro: ERROR: invalid input syntax for type integer.

Solução: confere se as colunas da tabela batem com a estrutura dos dados do arquivo. Por exemplo, dados numéricos têm que ir pra colunas numéricas, e datas pra colunas do tipo DATE.

Agora você já tá com tudo que precisa pra usar COPY e importar dados do servidor de forma eficiente. Usa essas dicas nos seus projetos pra economizar tempo e turbinar seu trabalho com bancos de dados.

2
Tarefa
SQL SELF, nível 23, lição 4
Bloqueado
Criação de tabela e carregamento de dados do servidor
Criação de tabela e carregamento de dados do servidor
1
Pesquisa/teste
Inserção de dados a partir de CSV, nível 23, lição 4
Indisponível
Inserção de dados a partir de CSV
Inserção de dados a partir de CSV
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION