L'impostazione dei valori predefiniti per le variabili non è supportata in psql, ma puoi farlo usando una soluzione alternativa.
Questo comando psql:
\set myVar :myVar
non fa nulla se la variabile è stata già impostata tramite psql (questo significa che myVar viene reimpostata sul suo valore), altrimenti la variabile viene impostata letteralmente sulla stringa :myVar
.
Usando questa circostanza e l'altro comando psql \gset
, puoi effettivamente impostare un valore predefinito per myVar. Metti questo sopra il tuo 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
Sembra funzionare solo con variabili di testo, ma puoi eseguire il cast su numeric se hai bisogno di variabili numeriche:
SELECT CASE
WHEN :'myVar'= ':myVar'
THEN '10'
ELSE :'myVar'
END::numeric AS "myVar" \gset
Come funziona \gset:
\gset
consente di impostare una variabile dal risultato di una query di selezione. La variabile di risultato è denominata come il nome della colonna, ecco perché è necessaria la clausola AS "myVar"
alla fine della query (non dimenticare le virgolette se vuoi usare nomi di variabili con lettere maiuscole).
Ad esempio il comando:
SELECT 'hello' AS var1 \gset
imposta la variabile var1
a hello
, lo stesso di
\set var1 hello
Per ulteriori informazioni, vedere qui:http://www.postgresql.org /docs/9.4/static/app-psql.html