Procedury składowane w PostgreSQL/Debuggowanie
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
edytujIstnieje 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
edytujPo 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.
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
edytujPrzed debuggowaniem procedur, należy w bazie danych zainstalować dodatkowe procedury za pomocą skryptu pldbgqpi.sql dostarczanego w źródłach biblioteki.
Interfejs pgAdmin
edytujDebuggowanie 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- Using PgAdmin PLPgSQL Debugger ostatni dostęp 2011-08-05