February 26th, 2007 by depesz | Tags: | 3 comments »
Did it help? If yes - maybe you can help me?

weszlo do cvs'a, wiec już chyba mogę opisać.

rzecz jest prosta.

od jakiegoś czasu w psql'u można używać zmiennych. przykład:

# \set a 123
# \set b '''depesz'''
# select :a, ':b';
?column? | ?column?
----------+----------
123 | depesz
(1 row)

zastosowanie jest oczywiste – prostsze pisanie sql'i z jakimiś zmiennymi.

minusy są dwa – utrudniona składnia do definiowania zmiennych tekstowych (potrójne apostrofy). i dwa – skoro i tak można tu ustawić tylko w skrypcie sql to funkcjonalność znikoma.

tak było do teraz.

ostatnio pojawił się patch na psql'a (i wszedł do cvs'a) dodający polecenie \prompt.

polecenie to pyta (zadanym tekstem) po czym odpowiedź użytkownika zapisuje do podanej zmiennej.

perfekcyjna sprawa gdy chcemy np. sparametryzować patch-bazodanowy.

przykład:

# \prompt 'Numeryczny identyfikator backupu? ' backup_id
Numeryczny identyfikator backupu? 123
# \echo :backup_id
123
# create table backup_:backup_id as select * from pg_proc;
SELECT
# select count(*) from backup_123;
count
-------
2007
(1 row)

sweet 🙂

  1. 3 comments

  2. # k
    Feb 26, 2007

    i jedna rzecz mniej do wycinania przy przenoszeniu skryptow z Oracle 🙂

  3. May 4, 2007

    Widac znowu PG kopuje pomysly z ORACLE. prompt czy bind ale to samo robi. Według mnie postgres sie rozwija ale to jest troszeczke za wolno. Sledze rozwuj MySQLa i PG i wydaje mi sie ze rok moze 2 i PG zostanie w tyle.

  4. # cienki_bolek
    Jun 6, 2007

    Jesli to dziala tak jak w oraclu to istnieje inny, niebagatelny plus. Query plan jest cache’owany, przy wykorzystaniu zmiennych baza nie musi go wykonywac ponownie. Co oczywiscie poprawia wydajnosc, aczkolwiek nie zawsze 😉

Leave a comment