En général, la substitution de variables fonctionne avec les méta-commandes (commençant par une barre oblique inverse), mais \copy
est une exception, comme documenté dans la manpage
de psql :
Je ne suis pas d'accord avec le commentaire de @BaconBits à la question selon laquelle EXECUTE
de plpgsql pourrait être la réponse. Une instruction côté serveur, dynamique ou non, n'accèdera pas au système de fichiers côté client, contrairement à \copy
. Vous pouvez utiliser COPY
à la place, mais il faut être superutilisateur et ce fichier doit être accessible au postgres
utilisateur sur le serveur.
Je crois que pour \copy
à partir d'un nom de fichier variable, la variable doit être injectée dans le script avant psql
le lit. Vous pouvez intégrer le script SQL dans un script shell et le transmettre à psql
en tant que chaîne ici corrigible, ou filtrez-la via sed
ou perl
ou toute méthode unix similaire.