Deməli, ilk prosedurunu və ya funksiyanı yazdın, işə saldın, amma nəsə düz getmədi. Əlbəttə, bir ton RAISE NOTICE əlavə edə bilərsən ki, "gəmi harada qayaya çırpıldı" başa düşəsən. Amma! Niyə özümüzü əziyyətə salaq ki, əgər pgAdmin-də daxili debug var?
pgAdmin sənə kodu addım-addım icra etməyə, breakpoint-lər (dayanma nöqtələri) qoymağa, dəyişənlərin dəyərlərinə baxmağa və error-ların səbəbini tapmağa imkan verir. Bu, sanki "detektiv dəstin"dir: "Niyə query işləmir?" sirrini araşdırmaq üçün.
Niyə pgAdmin ilə debug lazımdır?
Bəzən prosedurların içindəki bug-lar o qədər dərində gizlənir ki, sadəcə log-lar və ya terminalda yazılan text ilə baş çıxarmaq əsl işgəncəyə çevrilir. Elə bu anda addım-addım debug köməyə gəlir, hər mərhələdə nə baş verdiyini görürsən. Təsəvvür elə, bu, çətin bir puzzle-i yığmaq kimidir, amma ipucları ilə.
pgAdmin-də debug ilə sən:
- Breakpoint-lər (dayanma nöqtələri) qoyursan — kodun icrası həmin yerdə dayanır və sən cari vəziyyəti analiz edə bilirsən.
- SQL kodunu addım-addım keçirsən — həqiqətən də, hər addımda hansı operatorun icra olunduğunu görürsən.
- Dəyişənlərin dəyərlərinə real vaxtda baxırsan — məlumatların düzgün ötürülüb-ötürülmədiyinə əmin olursan.
- Error-un harada baş verdiyini tapırsan və səbəbini anlayırsan.
Necə başlamaq olar: pgAdmin-də debug üçün hazırlıq
Debug-a başlamazdan əvvəl gəlin əmin olaq ki, hər şey düzgün qurulub.
plpgsql extension-un aktivləşdirilməsi
Verilənlər bazanda PL/pgSQL proqramlaşdırma dilinin aktiv olduğuna əmin ol:
CREATE EXTENSION IF NOT EXISTS plpgsql;
Bu dil adətən PostgreSQL-də default olaraq aktiv olur, amma yenə də yoxlamaq yaxşıdır.
Əmin ol ki, səndə pgAdmin 4 və ya daha yeni versiya quraşdırılıb (debug-u dəstəkləyir). Əgər hələ yoxdursa, pgAdmin-i rəsmi saytdan yükləyə bilərsən.
pldbgapi extension-un quraşdırılması
PL/pgSQL-in pgAdmin-də debug olunması üçün pldbgapi extension-un aktiv olması lazımdır:
CREATE EXTENSION IF NOT EXISTS pldbgapi;
Bu extension xüsusi olaraq debug-layıcı ilə işləmək üçün yaradılıb.
Çox vacib!!! Bu sorğunu icra etmək üçün PostgreSQL serverində admin hüquqların olmalıdır.
Debug-un əsasları: breakpoint-lərin qoyulması
Breakpoint-lər — kodda xüsusi nöqtələrdir ki, prosedur və ya funksiya icrası həmin yerdə dayanır və sən prosesin içinə baxa bilirsən. Bu, uzun yolda qısa bir fasilə kimidir: dayandın, ətrafa baxdın, xəritəni yoxladın və sonra davam elədin.
pgAdmin-də breakpoint necə qoyulur?
- pgAdmin-i aç və verilənlər bazana qoşul.
- Object tree-də funksiyanı və ya proseduru tap: Functions → <sxemin> → <funksiyan>.
- Funksiyanın üzərinə sağ klik elə və Debugging → Debug seç. Debug-layıcı açılacaq.
- Funksiya kodunun açılan pəncərəsində debug-a başlamaq istədiyin sətri tap və soldakı sahədə kliklə. Qırmızı dairə görəcəksən — bu, breakpoint-dir.
Bu, belə görünür:
CREATE OR REPLACE FUNCTION example_function(id INTEGER)
RETURNS VOID AS $$
BEGIN
RAISE NOTICE 'Sən id seçdin: %', id;
-- Burada breakpoint qoymaq olar
PERFORM some_operation(id);
END;
$$ LANGUAGE plpgsql;
Breakpoint qoyandan sonra funksiyanı işə sala bilərsən və icra məhz həmin yerdə dayanacaq. İndi dəyişənlərin dəyərlərinə, əvvəlki operatorların nəticələrinə baxa və əlbəttə, kodun icrasını davam etdirə bilərsən.
pgAdmin-də dəyişənlərə baxış
Kodun dayandığını bilmək yaxşıdır. Amma daha faydalısı — həmin anda yaddaşda hansı məlumatların olduğunu başa düşməkdir. Məsələn:
- Giriş parametrlərinin dəyərləri hansılardır.
- Hansısa blokdan sonra dəyişənlər necə dəyişdi.
- Query bazadan nə qaytardı.
Dəyişənlərin dəyərlərinə necə baxmaq olar?
Funksiya breakpoint-də dayandıqda:
- Debug pəncərəsinin aşağı hissəsində Variables tab-ına keç.
- Burada bütün dəyişənlərin və onların cari dəyərlərinin siyahısını görəcəksən.
Tutaq ki, belə bir funksiya var:
CREATE OR REPLACE FUNCTION calculate_discount(price NUMERIC, discount NUMERIC)
RETURNS NUMERIC AS $$
DECLARE
discounted_price NUMERIC;
BEGIN
discounted_price := price - (price * discount / 100);
RETURN discounted_price;
END;
$$ LANGUAGE plpgsql;
Əgər discounted_price sətrində breakpoint qoysan, debug-layıcı göstərəcək ki, price və discount artıq dəyərə malikdir, amma discounted_price hələ boşdur.
Dayanandan sonra dəyişənlərin siyahısı belə görünür:
| Dəyişən | Dəyər |
|---|---|
price |
100.00 |
discount |
15.00 |
discounted_price |
NULL |
Cari sətri icra etdikdən sonra discounted_price artıq 85.00 olacaq.
Kodun addım-addım icrası
Debug pəncərəsində funksiyanın icrasını bu düymələrlə idarə edə bilərsən:
- Step Over — cari operatoru icra edir və növbətiyə keçir.
- Step Into — çağırılan funksiya və ya prosedurun içinə "girir".
- Continue — icranı növbəti breakpoint-ə və ya sona qədər davam etdirir.
Praktik nümunə: mürəkkəb funksiyaların debug olunması
Gəlin bir az daha mürəkkəb funksiya yazıb debug edək.
Nümunə: sifarişlərin işlənməsi
CREATE OR REPLACE FUNCTION process_order(order_id INTEGER)
RETURNS TEXT AS $$
DECLARE
order_status TEXT;
total_amount NUMERIC;
BEGIN
-- Sifarişin statusunu təyin edirik
SELECT status INTO order_status
FROM orders
WHERE id = order_id;
IF order_status = 'Pending' THEN
-- Sifarişin məbləğini hesablayırıq
SELECT SUM(price * quantity) INTO total_amount
FROM order_items
WHERE order_id = order_id;
-- Sifarişin statusunu yeniləyirik
UPDATE orders
SET status = 'Processed', processed_date = NOW()
WHERE id = order_id;
RETURN 'Sifariş işlənib. Məbləğ: ' || total_amount;
ELSE
RETURN 'Sifariş artıq işlənib və ya mövcud deyil.';
END IF;
END;
$$ LANGUAGE plpgsql;
Mümkün breakpoint-lər:
SELECT status INTO order_statussətrində.SELECT SUM(price * quantity) INTO total_amountsətrində.
Debug zamanı bunları yoxlaya bilərsən:
order_statushəqiqətən'Pending'olub-olmadığını yoxla.total_amount-un düzgün hesablanıb-hesablanmadığını yoxla.
Tez-tez rast gəlinən error-lar və onların həlli yolları
pgAdmin ilə debug zamanı belə situasiyalarla qarşılaşa bilərsən:
- Funksiyanı siyahıda görmürsən. Əmin ol ki, funksiya həqiqətən bazada yaradılıb və düzgün bazaya qoşulmusan.
Breakpoint-lər işləmir. Yoxla ki,
pldbgapiextension-u aktivdir və lazımi hüquqların var.Debug-layıcıya qoşulma error-u. Əmin ol ki, PostgreSQL serveri debug üçün düzgün qurulub (
shared_preload_librariesparametrlərindəpldbgapivar).
pgAdmin ilə PL/pgSQL debug-u prosesi həqiqətən çox rahat və intuitiv edir. Breakpoint qoy, dəyişənlərin "nəfəsini" yoxla və bütün xırda səhvləri düzəlt — bu, artıq ideal app-a gedən yolun yarısıdır!
GO TO FULL VERSION