PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

ne définit la variable dans psql-script que si elle n'est pas spécifiée sur la ligne de commande

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