Задаването на стойности по подразбиране за променливи не се поддържа в psql, но можете да го направите, като използвате заобиколно решение.
Тази psql команда:
\set myVar :myVar
не прави нищо, ако променливата вече е зададена чрез psql (това означава, че myVar е зададен отново на своята стойност), в противен случай променливата е зададена буквално на низа :myVar
.
Използвайки това обстоятелство и другата psql команда \gset
, всъщност можете да зададете стойност по подразбиране за myVar. Поставете това в горната част на вашия 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
Изглежда, че работи само с текстови променливи, но можете да прехвърлите към числови, ако имате нужда от числови променливи:
SELECT CASE
WHEN :'myVar'= ':myVar'
THEN '10'
ELSE :'myVar'
END::numeric AS "myVar" \gset
Как работи \gset:
\gset
ви позволява да зададете променлива от резултата от заявка за избор. Резултатната променлива е наименувана като името на колоната, ето защо имате нужда от клаузата AS "myVar"
в края на заявката (не забравяйте двойните кавички, ако искате да използвате имена на променливи с главни букви).
Например командата:
SELECT 'hello' AS var1 \gset
задава променливата var1
до hello
, същото като
\set var1 hello
Вижте тук за повече информация:http://www.postgresql.org /docs/9.4/static/app-psql.html