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