sql >> Base de Datos >  >> RDS >> PostgreSQL

solo establezca la variable en psql-script si no se especifica en la línea de comandos

La configuración de valores predeterminados para las variables no se admite en psql, pero puede hacerlo mediante una solución alternativa.

Este comando psql:

\set myVar :myVar

no hace nada si la variable ya se configuró a través de psql (esto significa que myVar se configura nuevamente en su valor); de lo contrario, la variable se configura literalmente en la cadena :myVar .

Usando esta circunstancia y el otro comando psql \gset , en realidad puede establecer un valor predeterminado para myVar. Ponga esto en la parte superior de su 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 que solo funciona con variables de texto, pero puede convertir a numérico si necesita variables numéricas:

SELECT CASE 
  WHEN :'myVar'= ':myVar'
  THEN '10' 
  ELSE :'myVar' 
END::numeric AS "myVar"  \gset

¿Cómo funciona \gset:

\gset le permite establecer una variable a partir del resultado de una consulta de selección. La variable de resultado se nombra como el nombre de la columna, por eso necesita la cláusula AS "myVar" al final de la consulta (no olvide las comillas dobles si desea utilizar nombres de variables con letras mayúsculas).

Por ejemplo el comando:

SELECT 'hello' AS var1 \gset

establece la variable var1 a hello , lo mismo que

\set var1 hello

Consulte aquí para obtener más información:http://www.postgresql.org /docs/9.4/static/app-psql.html