PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Legen Sie die Variable nur im psql-Skript fest, wenn sie nicht in der Befehlszeile angegeben ist

Das Festlegen von Standardwerten für Variablen wird in psql nicht unterstützt, aber Sie können dies mithilfe einer Problemumgehung tun.

Dieser psql-Befehl:

\set myVar :myVar

tut nichts, wenn die Variable bereits per psql gesetzt wurde (d.h. myVar wird wieder auf seinen Wert gesetzt), ansonsten wird die Variable wörtlich auf den String :myVar gesetzt .

Unter Verwendung dieses Umstands und des anderen psql-Befehls \gset , können Sie tatsächlich einen Standardwert für myVar festlegen. Fügen Sie dies oben in Ihr SQL-Skript ein:

\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

Es scheint nur mit Textvariablen zu funktionieren, aber Sie können in numerische Variablen umwandeln, wenn Sie numerische Variablen benötigen:

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

Wie funktioniert \gset:

\gset ermöglicht es Ihnen, eine Variable aus dem Ergebnis einer Auswahlabfrage festzulegen. Die Ergebnisvariable wird wie der Spaltenname benannt, deshalb brauchen Sie die Klausel AS "myVar" am Ende der Abfrage (vergessen Sie nicht die doppelten Anführungszeichen, wenn Sie Variablennamen mit Großbuchstaben verwenden möchten).

Zum Beispiel der Befehl:

SELECT 'hello' AS var1 \gset

setzt die Variable var1 auf hello , dasselbe wie

\set var1 hello

Weitere Informationen finden Sie hier:http://www.postgresql.org /docs/9.4/static/app-psql.html