Tenho acesso somente leitura a um banco de dados em um servidor remoto. Assim, posso executar:
COPY products TO '/tmp/products.csv' DELIMITER ',';
Mas nesse servidor eu não tenho permissão para criar/salvar um arquivo, então preciso fazer isso na minha máquina local.
Quando me conecto ao banco de dados remoto, como posso executar um comando para salvar o arquivo na minha máquina local em vez do servidor remoto?
Ou, como posso executar um comando do Linux para conectar ao banco de dados remoto, executar uma consulta e salvar a saída como um arquivo em minha máquina local?
Ambas as abordagens já sugeridas parecem ser desnecessariamente complicadas.
Basta usar
psql
o\copy
comando interno do , que funciona exatamente como no lado do servidor,COPY
mas faz uma cópia do protocolo de conexão para o cliente e usa os caminhos do cliente.Por ser um
psql
comando de barra invertida, você omite o ponto e vírgula à direita, por exemplo:Consulte a
\copy
entrada no manual dopsql
comando e a documentação doCOPY
comando para obter mais detalhes.Assim como
COPY
você pode usar\copy
com uma(SELECT ...)
consulta em vez de um nome de tabela ao copiar dados (mas não dentro).Uma alternativa geralmente inferior que pode ser útil em algumas situações limitadas é usar:
e use o
-o
sinalizador ou redirecionamento de saída do shell para gravar a saída em um arquivo. Você quase sempre deve usar\copy
de preferência a isso.O comando do Linux é: