Indstilling af standardværdier for variabler understøttes ikke i psql, men du kan gøre det ved at bruge en løsning.
Denne psql-kommando:
\set myVar :myVar
gør intet, hvis variablen allerede var sat via psql (dette betyder, at myVar er sat igen til sin værdi), ellers er variablen sat bogstaveligt til strengen :myVar
.
Ved at bruge denne omstændighed og den anden psql-kommando \gset
, kan du faktisk indstille en standardværdi for myVar. Sæt dette øverst i dit sql-script:
\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 ser ud til kun at fungere med tekstvariabler, men du kan caste til numeriske, hvis du har brug for numeriske variable:
SELECT CASE
WHEN :'myVar'= ':myVar'
THEN '10'
ELSE :'myVar'
END::numeric AS "myVar" \gset
Hvordan virker \gset:
\gset
giver dig mulighed for at indstille en variabel fra resultatet af en udvalgt forespørgsel. Resultatvariablen er navngivet som kolonnenavnet, det er derfor, du har brug for klausulen AS "myVar"
i slutningen af forespørgslen (glem ikke de dobbelte anførselstegn, hvis du vil bruge variabelnavne med store bogstaver).
For eksempel kommandoen:
SELECT 'hello' AS var1 \gset
indstiller variablen var1
til hello
, det samme som
\set var1 hello
Se her for mere info:http://www.postgresql.org /docs/9.4/static/app-psql.html