sql >> Databasteknik >  >> RDS >> PostgreSQL

ställ bara in variabel i psql-script om den inte anges på kommandoraden

Att ställa in standardvärden för variabler stöds inte i psql, men du kan göra det med en lösning.

Detta psql-kommando:

\set myVar :myVar

gör ingenting om variabeln redan har ställts in via psql (det betyder att myVar sätts igen till sitt värde), annars sätts variabeln bokstavligen till strängen :myVar .

Genom att använda denna omständighet och det andra psql-kommandot \gset , kan du faktiskt ställa in ett standardvärde för myVar. Lägg detta överst i ditt sql-skript:

\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

Det verkar bara fungera med textvariabler, men du kan casta till numeriska om du behöver numeriska variabler:

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

Hur fungerar \gset:

\gset låter dig ställa in en variabel från resultatet av en urvalsfråga. Resultatvariabeln heter som kolumnnamnet, det är därför du behöver satsen AS "myVar" i slutet av frågan (glöm inte dubbla citattecken om du vill använda variabelnamn med stora bokstäver).

Till exempel kommandot:

SELECT 'hello' AS var1 \gset

ställer in variabeln var1 till hello , samma som

\set var1 hello

Se här för mer info:http://www.postgresql.org /docs/9.4/static/app-psql.html



  1. Fråga som insisterar på kolumner i "Order By"-satsen matchar kolumner i "Group by"-satsen

  2. Fysisk plats för FILESTREAM-data

  3. Räkna baserat på tillstånd i SQL Server

  4. jämför två arrayer av siffror och ta bort dubbletter i php