PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

ustawiaj zmienną tylko w skrypcie psql, jeśli nie została określona w wierszu poleceń

Ustawianie wartości domyślnych dla zmiennych nie jest obsługiwane w psql, ale można to zrobić za pomocą obejścia.

To polecenie psql:

\set myVar :myVar

nie robi nic, jeśli zmienna została już ustawiona przez psql (oznacza to, że myVar jest ponownie ustawiana na jego wartość), w przeciwnym razie zmienna jest ustawiana dosłownie na łańcuch :myVar .

Wykorzystując tę ​​okoliczność i inne polecenie psql \gset , możesz ustawić domyślną wartość myVar. Umieść to na górze skryptu 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

Wydaje się, że działa tylko ze zmiennymi tekstowymi, ale możesz rzutować na numeryczne, jeśli potrzebujesz zmiennych numerycznych:

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

Jak działa \gset:

\gset umożliwia ustawienie zmiennej z wyniku zapytania wybierającego. Zmienna wynikowa ma taką samą nazwę jak nazwa kolumny, dlatego potrzebna jest klauzula AS "myVar" na końcu zapytania (nie zapomnij o podwójnych cudzysłowach, jeśli chcesz używać nazw zmiennych pisanych wielkimi literami).

Na przykład polecenie:

SELECT 'hello' AS var1 \gset

ustawia zmienną var1 do hello , tak samo jak

\set var1 hello

Więcej informacji znajdziesz tutaj:http://www.postgresql.org /docs/9.4/static/app-psql.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:Ostrzeżenie:strona kodowa konsoli (437) różni się od strony kodowej Windows (1252)

  2. Postgres Wstaw do reguły widoku z klauzulą ​​zwracającą

  3. Jak zmienić database_url w heroku?

  4. alternatywa sp_send_dbmail w postgresie? Łatwy sposób na wysyłanie raportów e-mail Postgres?

  5. Jak usunąć powrót karetki i nowe linie w Postgresql?