Obecně platí, že substituce proměnných funguje s meta-příkazy (počínaje zpětným lomítkem), ale \copy je výjimkou, jak je zdokumentováno na manuálové stránce
psql :
Nesouhlasím s komentářem @BaconBits k otázce, že plpgsql EXECUTE by mohla být odpověď. Příkaz na straně serveru, dynamický nebo jiný, nebude mít přístup k systému souborů na straně klienta, na rozdíl od \copy . Můžete použít COPY místo toho, ale vyžaduje to být superuživatel a tento soubor má být přístupný pro postgres uživatele na serveru.
Věřím, že \copy z proměnného názvu souboru, musí být proměnná vložena do skriptu před psql čte to. Skript SQL můžete integrovat do skriptu shellu a vložit jej do psql jako opravitelný řetězec zde nebo jej filtrujte přes sed nebo perl nebo jakoukoli podobnou unixovou metodou.