La définition de valeurs par défaut pour les variables n'est pas prise en charge dans psql, mais vous pouvez le faire en utilisant une solution de contournement.
Cette commande psql :
\set myVar :myVar
ne fait rien si la variable a déjà été définie via psql (cela signifie que myVar est à nouveau défini sur sa valeur), sinon la variable est définie littéralement sur la chaîne :myVar
.
En utilisant cette circonstance et l'autre commande psql \gset
, vous pouvez en fait définir une valeur par défaut pour myVar. Mettez ceci en haut de votre 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
Cela semble fonctionner uniquement avec des variables de texte, mais vous pouvez convertir en numérique si vous avez besoin de variables numériques :
SELECT CASE
WHEN :'myVar'= ':myVar'
THEN '10'
ELSE :'myVar'
END::numeric AS "myVar" \gset
Comment fonctionne \gset :
\gset
permet de définir une variable à partir du résultat d'une requête de sélection. La variable de résultat est nommée comme le nom de la colonne, c'est pourquoi vous avez besoin de la clause AS "myVar"
à la fin de la requête (n'oubliez pas les guillemets doubles si vous souhaitez utiliser des noms de variables avec des lettres majuscules).
Par exemple la commande :
SELECT 'hello' AS var1 \gset
définit la variable var1
à hello
, identique à
\set var1 hello
Voir ici pour plus d'informations :http://www.postgresql.org /docs/9.4/static/app-psql.html