CodeGym /Kurslar /SQL SELF /PL/pgSQL-in pgAdmin vasitəsilə debug olunması: breakpoint...

PL/pgSQL-in pgAdmin vasitəsilə debug olunması: breakpoint-lər, dəyişənlərə baxış

SQL SELF
Səviyyə , Dərs
Mövcuddur

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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?

  1. pgAdmin-i aç və verilənlər bazana qoşul.
  2. Object tree-də funksiyanı və ya proseduru tap: Functions<sxemin><funksiyan>.
  3. Funksiyanın üzərinə sağ klik elə və Debugging → Debug seç. Debug-layıcı açılacaq.
  4. 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:

  1. Debug pəncərəsinin aşağı hissəsində Variables tab-ına keç.
  2. 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, pricediscount 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:

  1. Step Over — cari operatoru icra edir və növbətiyə keçir.
  2. Step Into — çağırılan funksiya və ya prosedurun içinə "girir".
  3. 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:

  1. SELECT status INTO order_status sətrində.
  2. SELECT SUM(price * quantity) INTO total_amount sətrində.

Debug zamanı bunları yoxlaya bilərsən:

  • order_status hə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:

  1. 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.
  1. Breakpoint-lər işləmir. Yoxla ki, pldbgapi extension-u aktivdir və lazımi hüquqların var.

  2. Debug-layıcıya qoşulma error-u. Əmin ol ki, PostgreSQL serveri debug üçün düzgün qurulub (shared_preload_libraries parametrlərində pldbgapi var).

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!

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION