Nastavení výchozích hodnot pro proměnné není v psql podporováno, ale můžete to udělat pomocí náhradního řešení.
Tento příkaz psql:
\set myVar :myVar
nedělá nic, pokud byla proměnná již nastavena přes psql (to znamená, že myVar je nastavena znovu na svou hodnotu), jinak je proměnná nastavena doslova na řetězec :myVar
.
Pomocí této okolnosti a dalšího příkazu psql \gset
, můžete ve skutečnosti nastavit výchozí hodnotu pro myVar. Umístěte toto na začátek skriptu 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
Zdá se, že funguje pouze s textovými proměnnými, ale pokud potřebujete číselné proměnné, můžete přetypovat na numerické:
SELECT CASE
WHEN :'myVar'= ':myVar'
THEN '10'
ELSE :'myVar'
END::numeric AS "myVar" \gset
Jak \gset funguje:
\gset
umožňuje nastavit proměnnou z výsledku výběrového dotazu. Proměnná result se jmenuje jako název sloupce, proto potřebujete klauzuli AS "myVar"
na konci dotazu (nezapomeňte na dvojité uvozovky, pokud chcete používat názvy proměnných s velkými písmeny).
Například příkaz:
SELECT 'hello' AS var1 \gset
nastavuje proměnnou var1
hello
, stejně jako
\set var1 hello
Další informace naleznete zde:http://www.postgresql.org /docs/9.4/static/app-psql.html