PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

imposta la variabile solo in psql-script se non specificato nella riga di comando

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