/div>
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.