Att ställa in standardvärden för variabler stöds inte i psql, men du kan göra det med en lösning.
Detta psql-kommando:
\set myVar :myVar
gör ingenting om variabeln redan har ställts in via psql (det betyder att myVar sätts igen till sitt värde), annars sätts variabeln bokstavligen till strängen :myVar
.
Genom att använda denna omständighet och det andra psql-kommandot \gset
, kan du faktiskt ställa in ett standardvärde för myVar. Lägg detta överst i ditt sql-skript:
\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
Det verkar bara fungera med textvariabler, men du kan casta till numeriska om du behöver numeriska variabler:
SELECT CASE
WHEN :'myVar'= ':myVar'
THEN '10'
ELSE :'myVar'
END::numeric AS "myVar" \gset
Hur fungerar \gset:
\gset
låter dig ställa in en variabel från resultatet av en urvalsfråga. Resultatvariabeln heter som kolumnnamnet, det är därför du behöver satsen AS "myVar"
i slutet av frågan (glöm inte dubbla citattecken om du vill använda variabelnamn med stora bokstäver).
Till exempel kommandot:
SELECT 'hello' AS var1 \gset
ställer in variabeln var1
till hello
, samma som
\set var1 hello
Se här för mer info:http://www.postgresql.org /docs/9.4/static/app-psql.html