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.