PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Por que não posso usar uma variável em um comando de barra invertida postgres (\COPY)


Em geral, a substituição de variável funciona com metacomandos (começando com barra invertida), mas \copy é uma exceção, conforme documentado na manpage do psql :

Eu discordo do comentário do @BaconBits à pergunta que o EXECUTE do plpgsql pode ser a resposta. Uma instrução do lado do servidor, dinâmica ou não, não acessará o sistema de arquivos do lado do cliente, ao contrário de \copy . Você pode usar COPY em vez disso, mas requer ser superusuário e esse arquivo ser acessível ao postgres usuário no servidor.

Acredito que para \copy de um nome de arquivo variável, a variável deve ser injetada no script antes de psql lê-lo. Você pode integrar o script SQL em um script de shell e alimentá-lo para psql como uma string aqui passível de patch, ou filtre-a através de sed ou perl ou qualquer método semelhante ao unix.