A definição de valores padrão para variáveis não é suportada no psql, mas você pode fazer isso usando uma solução alternativa.
Este comando psql:
\set myVar :myVar
não faz nada se a variável já foi definida via psql (isto significa, myVar é definida novamente para seu valor), caso contrário a variável é definida literalmente para a string
:myVar
. Usando esta circunstância e o outro comando psql
\gset
, você pode definir um valor padrão para myVar. Coloque isso no topo do seu script 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
Parece funcionar apenas com variáveis de texto, mas você pode converter para numeric se precisar de variáveis numéricas:
SELECT CASE
WHEN :'myVar'= ':myVar'
THEN '10'
ELSE :'myVar'
END::numeric AS "myVar" \gset
Como o \gset funciona:
\gset
permite definir uma variável a partir do resultado de uma consulta de seleção. A variável de resultado é nomeada como o nome da coluna, é por isso que você precisa da cláusula AS "myVar"
no final da consulta (não se esqueça das aspas duplas se quiser usar nomes de variáveis com letras maiúsculas). Por exemplo o comando:
SELECT 'hello' AS var1 \gset
define a variável
var1
para hello
, o mesmo que \set var1 hello
Veja aqui mais informações:http://www.postgresql.org /docs/9.4/static/app-psql.html