Estou usando o Postgres 14 no CentOS 7. Gostaria de exportar os dados de uma única tabela, mas não tenho privilégios de superusuário. Sem surpresa, recebo esse erro
myapp=> COPY myapp_currencyprice to '/tmp/prices.csv' DELIMITER ',' CSV HEADER;
ERROR: must be superuser or a member of the pg_write_server_files role to COPY to a file
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
Qual é a maneira correta de exportar dados da tabela (para uso com importação posterior) para um usuário que não possui privs de superusuário?
COPY ... TO <file>
cria o arquivo de saída no servidor, o que, além de exigir privilégios elevados, em muitos casos não é útil, pois nem todos têm acesso ao sistema de arquivos do servidor.A dica mostrada após a mensagem de erro sugere duas alternativas que criam o arquivo de saída no cliente. Essas alternativas são de fato uma só, apenas embrulhadas de maneira diferente.
Um é
COPY ... TO STDOUT
; isso enviará a saída da consulta para o terminal do cliente e, em combinação com o\g <file>
psql
meta-comando, redirecionará para o arquivo especificado. Por exemplo:Outra alternativa é usar o
\copy
meta-comando, que faz a mesma coisa, embora as opções devam ser especificadas usando a\pset
sintaxe: