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
WITHdeixam 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 CSVdiz pro PostgreSQL que o arquivo tá no formato CSV.HEADER TRUEsignifica 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 | 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:
- O arquivo tá liberado pra leitura pelo usuário do PostgreSQL. Normalmente é o usuário
postgres. - 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
COPYdeixa 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.
GO TO FULL VERSION