Over het algemeen werkt variabele substitutie met meta-commando's (beginnend met backslash), maar \copy
is een uitzondering, zoals gedocumenteerd in de manpage
van psql :
Ik ben het niet eens met de opmerking van @BaconBits op de vraag dat plpgsql's EXECUTE
zou het antwoord kunnen zijn. Een server-side statement, dynamisch of anderszins, heeft geen toegang tot het client-side bestandssysteem, in tegenstelling tot \copy
. U mag COPY
. gebruiken in plaats daarvan, maar het moet superuser zijn en dat bestand moet toegankelijk zijn voor de postgres
gebruiker op de server.
Ik geloof dat om \copy
van een variabele bestandsnaam, moet de variabele in het script worden geïnjecteerd vóór psql
leest het. Je zou het SQL-script in een shellscript kunnen integreren en het aan psql
. kunnen geven als een patchbare here-string, of filter het door sed
of perl
of een vergelijkbare unix-achtige methode.