PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum kann ich keine Variable in einem Postgres-Backslash-Befehl (\COPY) verwenden?

Im Allgemeinen funktioniert die Variablenersetzung mit Meta-Befehlen (beginnend mit Backslash), aber \copy ist eine Ausnahme, wie in der Manpage von psql dokumentiert :

Ich stimme @BaconBits Kommentar zu der Frage nicht zu, dass plpgsqls EXECUTE könnte die Antwort sein. Eine serverseitige Anweisung, ob dynamisch oder nicht, greift im Gegensatz zu \copy nicht auf das clientseitige Dateisystem zu . Sie können COPY verwenden stattdessen, aber es erfordert Superuser und diese Datei muss für postgres zugänglich sein Benutzer auf dem Server.

Ich glaube das zu \copy aus einem variablen Dateinamen muss die Variable vor psql in das Skript eingefügt werden liest es. Sie könnten das SQL-Skript in ein Shell-Skript integrieren und es an psql übergeben als patchbarer Here-String, oder filtern Sie ihn durch sed oder perl oder eine ähnliche Unix-artige Methode.