Procedury składowane w PostgreSQL/Debuggowanie

Z Wikibooks, biblioteki wolnych podręczników.

PostgreSQL nie posiada żadnego wbudowanego mechanizmu debuggowania procedur składowanych.

Z powodzeniem można jednak posiłkować się komunikatami do wypisywanie bieżących wartości parametrów, czy zmiennych. Szczególnie, że wstawianie wartości do komunikatu w instrukcji RAISE jest raczej niekłopotliwe. Warto ustawić sensowne logowanie i korzystać logów.

Pomocne jest także zastępowanie treści funkcji na czas wyszukiwania błędu, np. można zakomentować część kodu, albo wstawić wprost jakiś kod diagnostyczny.

Pamiętać też należy, że kompilator PL/pgSQL nie sprawdza zbyt wielu rzeczy w czasie kompilacji, więc przy tworzeniu kodu dobrze wstawiać aseracje, które pozwolą szybko wykryć problemy. Co prawda w PL/pgSQL nie ma wbudowanej funkcji assert, ale można sobie taką łatwo napisać.

create function assert(bool, text) returns void as $$
	BEGIN
		IF NOT $1 THEN RAISE $2; END IF;
	END;
$$ language 'plpsql';

i potem używać np. PERFORM assert(kwota > 0, 'Kwota musi być większa od zera').

EDB-debugger[edytuj]

Istnieje rozszerzenie edb-debugger, które po zainstalowaniu w systemie, oraz dodaniu kilku funkcji do bazy danych udostępnia typowe funkcje debuggera:

  • praca krokowa,
  • ustawianie pułapek,
  • podgląd zmiennych lokalnych,
  • podgląd parametrów funkcji,
  • podgląd stosu wywołań.

Rozszerzenie jest zintegrowane z popularnym narzędziem administracyjnym pgAdmin (od wersji 1.10), które udostępnia interfejs graficzny. Jednak edb-debugger wymaga osobnej kompilacji źródeł z repozytorium CVS i instalacji.

Instalacja w systemie Linux[edytuj]

Po pierwsze należy pobrać źródła dla wersji PostgresSQL, która jest używana i wykonać skrypt ./configure.

Pobranie źródeł edb-debugger:

cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/edb-debugger checkout katalg

Zostaną pobrane dwa katalogi server oraz workstation, katalog server należy umieścić w katalogu contrib źródeł PostgresSQL. Z poziomu tego katalogu należy uruchomić make i ostatecznie z konta roota make install.


Informacja
Jeśli przy kompilacji będzie brakować pliku fmgroids.h trzeba utworzyć linka lub skopiować go z katalogu src/backend/utils/.

Ostatnim krokiem jest ustawienie w pliku postgresql.conf parametru:

shared_preload_libraries = '$libdir/plugins/plugin_debugger'

i zrestartowanie serwera, żeby zmiany zostały uwzględnione.

Przygotowanie bazy danych[edytuj]

Przed debuggowaniem procedur, należy w bazie danych zainstalować dodatkowe procedury za pomocą skryptu pldbgqpi.sql dostarczanego w źródłach biblioteki.

Interfejs pgAdmin[edytuj]

Debuggowanie jest aktywne tylko, jeśli zalogowany jest superużytkownik (ang. superuser). Wówczas po kliknięciu prawym klawiszem na funkcji dostępne są dwie dodatkowe opcje:

  • Debug - podgląd funkcji;
  • Ustawienia pułapki - ustawienie pułapki na funkcji i oczekiwanie na jej wywołania (z innej sesji).

Okno podzielone jest na 3 części:

  • kod źródłowy funkcji, gdzie można ustawiać pułapki;
  • okno wyjściowe, zawierające listę albo argumentów albo zmiennych,
  • okno stosu, pokazujące stos wywołań funkcji, w tym przekazane argumenty.

Oprócz tego zawiera przyciski pozwalające wywołać szybko wszystkie funkcje debuggera.


Linki zewnętrzne[edytuj]