Ogólnie rzecz biorąc, podstawianie zmiennych działa z metapoleceniami (zaczynając od odwrotnego ukośnika), ale \copy jest wyjątkiem, co udokumentowano na stronie podręcznika
psql :
Nie zgadzam się z komentarzem @BaconBits do pytania, które EXECUTE plpgsql może być odpowiedzią. Instrukcja po stronie serwera, dynamiczna lub inna, nie uzyska dostępu do systemu plików po stronie klienta, w przeciwieństwie do \copy . Możesz użyć COPY zamiast tego, ale wymaga to bycia superużytkownikiem i tego pliku, aby był dostępny dla postgres użytkownika na serwerze.
Wierzę, że do \copy ze zmiennej nazwa pliku, zmienna musi zostać wstrzyknięta do skryptu przed psql czyta to. Możesz zintegrować skrypt SQL ze skryptem powłoki i przesłać go do psql jako poprawny ciąg znaków lub filtruj go przez sed lub perl lub jakakolwiek podobna metoda uniksowa.