PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi ne puis-je pas utiliser une variable dans une commande postgres backslash (\COPY)

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.