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.