Ustawianie wartości domyślnych dla zmiennych nie jest obsługiwane w psql, ale można to zrobić za pomocą obejścia.
To polecenie psql:
\set myVar :myVar
nie robi nic, jeśli zmienna została już ustawiona przez psql (oznacza to, że myVar jest ponownie ustawiana na jego wartość), w przeciwnym razie zmienna jest ustawiana dosłownie na łańcuch :myVar
.
Wykorzystując tę okoliczność i inne polecenie psql \gset
, możesz ustawić domyślną wartość myVar. Umieść to na górze skryptu sql:
\set myVar :myVar
-- now myVar is set to the string ':myVar' if was not already set.
-- Checking it using a CASE statement:
SELECT CASE
WHEN :'myVar'= ':myVar'
THEN 'default_value'
ELSE :'myVar'
END AS "myVar" \gset -- < \gset call at end of the query
Wydaje się, że działa tylko ze zmiennymi tekstowymi, ale możesz rzutować na numeryczne, jeśli potrzebujesz zmiennych numerycznych:
SELECT CASE
WHEN :'myVar'= ':myVar'
THEN '10'
ELSE :'myVar'
END::numeric AS "myVar" \gset
Jak działa \gset:
\gset
umożliwia ustawienie zmiennej z wyniku zapytania wybierającego. Zmienna wynikowa ma taką samą nazwę jak nazwa kolumny, dlatego potrzebna jest klauzula AS "myVar"
na końcu zapytania (nie zapomnij o podwójnych cudzysłowach, jeśli chcesz używać nazw zmiennych pisanych wielkimi literami).
Na przykład polecenie:
SELECT 'hello' AS var1 \gset
ustawia zmienną var1
do hello
, tak samo jak
\set var1 hello
Więcej informacji znajdziesz tutaj:http://www.postgresql.org /docs/9.4/static/app-psql.html