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.