PostgreSQL – Usando COPY, pg dump and restore

Alex Isaac
Alex Isaac

div>Follow

29 de Janeiro, 2020 – 3 min ler

/div>

div>

Image source : digitalocean.com

O comando COPY no postgreSQL é utilizado para importar dados dos ficheiros para a tabela da base de dados e também para exportar tabelas da base de dados para o ficheiro.

Por exemplo, se quisermos importar dados de um ficheiro CSV para a tabela da base de dados, é utilizado o seguinte comando.

COPY <nome_da_tabela> FROM <file_path> DELIMITER ‘,’ CSV;

O comando acima assume que o ficheiro CSV tem os valores para todos os campos da tabela com delimitador como vírgula(,) e os campos estão ordenados no ficheiro da mesma forma que os da tabela.

Se o ficheiro contém os valores apenas para os campos particulares na tabela, temos de dar explicitamente os nomes dos campos juntamente com o nome_da_tabela.

Por exemplo, se o ficheiro tiver valores apenas para os campos1, campo2, e campo3, mas a tabela tiver muitos campos,

p>COPY <nome_da_tabela>(field1, field2, field3) FROM <file_path> DELIMITER ‘ , ‘ CSV;

Se o comando COPY for bem sucedido, devolverá COPY <número de linhas copiadas>

Podemos usar o CABEÇALHO na linha de comando que pode ser usada para ignorar a primeira linha do ficheiro enquanto copia porque pode conter o nome dos campos.

COPY <nome_do_ficha> DE <file_path> DELIMITER ‘,’ CSV HEADER;

Se o erro ocorrer entre a operação COPY FROM, a operação será interrompida, mas os dados armazenados até ao momento não serão apagados. Estes dados não são visíveis mas ocupam o espaço no disco. Neste caso, temos de usar o comando VACUUM para limpar os usos indesejados do disco.

Exportar para um ficheiro da Tabela de Base de Dados

O comando COPY TO é usado para copiar as tabelas da base de dados para o ficheiro, usando o delimitador requerido.

COPY <nome_da_tabela> TO <file_path> DELIMITER ‘,’ CSV HEADER;

se não quiser que os nomes_da_coluna sejam copiados para o ficheiro CSV, então pode ignorar o CABEÇALHO.

Para exportar apenas os campos específicos, só pode dar os nomes dos campos com o nome da tabela.

COPY <nome_da_tabela>(field1, field2, field3) TO <file_path> DELIMITER ‘,’ CSV;

p>Podemos também usar consultas para copiar os registos particulares que correspondem à condição para o ficheiro.

COPY ( SELECT * FROM <table>WHERE id=10 ) TO <file_path> DELIMITER ‘,’ CSV;

É recomendado dar o caminho absoluto enquanto se utiliza COPY. O próprio servidor obriga-o a utilizar o caminho absoluto enquanto utiliza COPY TO. Mas durante a leitura do ficheiro por COPY FROM pode usar tanto o nome de caminho absoluto como o relativo.

Diferença entre o comando COPY e \copy

Se estiver ligado a um servidor remoto PostgreSQL e quiser copiar um registo de tabela no ficheiro na máquina local. Neste caso, pode usar o comando \copy que é um comando de construção do PostgreSQL. Enquanto utiliza COPY, o servidor está a fazer a operação de escrita, mas durante o \copy, o psql escreve o ficheiro CSV e transfere-o para a máquina local.

Para utilizar o comando \copy, a sua máquina local deve ter privilégios suficientes. Isto não significa os privilégios de superutilizador.

pg_dump e pg_restore

O pg_dump é uma ferramenta para fazer o backup de uma base de dados para o ficheiro. Podemos restaurá-la mais tarde noutra base de dados. Para fazer o backup da base de dados para uma execução de ficheiro,

pg_dump -U <username> -h <host> -W -F t <db_name>><output_filename>

p>where,

-W obriga a solicitar uma palavra-passe enquanto se regista na base de dados.

-F especifica o formato do ficheiro dump criado, aqui t refere-se ao ficheiro tar.

Agora o ficheiro dump é criado para a base de dados.

Também, podemos restaurar o ficheiro para uma nova base de dados utilizando,

pg_restore -U <username> -h <host> -W -F t -d <db_name><dump_file_name>

Todos os parâmetros são iguais aos acima indicados.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *