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.