Zmienne Postgresa są tworzone za pomocą polecenia \set, na przykład...
\set myvariable value
... i można go następnie zastąpić, na przykład jako ...
SELECT * FROM :myvariable.table1;
... lub ...
SELECT * FROM table1 WHERE :myvariable IS NULL;
edit:Od psql 9.1 zmienne mogą być rozwijane w cudzysłowie, jak w:
\set myvariable value
SELECT * FROM table1 WHERE column1 = :'myvariable';
W starszych wersjach klienta psql:
... Jeśli chcesz użyć zmiennej jako wartości w warunkowym zapytaniu łańcuchowym, takim jak ...
SELECT * FROM table1 WHERE column1 = ':myvariable';
... wtedy musisz uwzględnić cudzysłowy w samej zmiennej, ponieważ powyższe nie zadziała. Zamiast tego zdefiniuj swoją zmienną jako taką ...
\set myvariable 'value'
Jeśli jednak, tak jak ja, natknąłeś się na sytuację, w której chciałeś utworzyć ciąg z istniejącej zmiennej, znalazłem sztuczkę w tym...
\set quoted_myvariable '\'' :myvariable '\''
Teraz masz zarówno zmienną w cudzysłowie, jak i bez cudzysłowów tego samego łańcucha! I możesz zrobić coś takiego ....
INSERT INTO :myvariable.table1 SELECT * FROM table2 WHERE column1 = :quoted_myvariable;