PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

apenas defina a variável no script psql se não for especificado na linha de comando


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