CodeGym /Kurslar /SQL SELF /PL/pgSQL-in əsas imkanları

PL/pgSQL-in əsas imkanları

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

Gəlin görək, PL/pgSQL-i developer-lər və database admin-lər üçün bu qədər güclü və əvəzolunmaz edən nədir. Bu dərsdə biz PL/pgSQL-in üstünlükləri, unikal imkanları və real həyatda necə faydalı ola biləcəyini göstərən nümunələrdən danışacağıq.

PL/pgSQL-in nə üçün lazım olduğunu başa düşmək üçün təsəvvür elə ki, sən elə bir dünyadasan ki, hər bir proqramlaşdırma tapşırığını yalnız SQL ilə həll etməlisən. Məsələn, hər fakültə üzrə tələbələrin sayını hesablamaq üçün sən gərək mürəkkəb SQL-sorgusu yazasan və nəticələri client tərəfində işləyəsən. Bu, heç də effektiv deyil, düzdür? Bax, burada PL/pgSQL köməyə gəlir — variable-lar, dövrələr, şərtlər və error handling dəstəyi ilə.

PL/pgSQL istifadə etməyin plüsləri:

  1. Server tərəfində məntiq: PL/pgSQL sayəsində server və client arasında ötürülən data azalır, çünki bütün məntiq serverdə işləyir. Bu da şəbəkə gecikmələrini azaldır.
  2. Performance: PL/pgSQL-də yazılmış function-lar compile olunur və database-də saxlanılır, ona görə də bir neçə ayrı SQL-sorgudan daha sürətli işləyir.
  3. Task-ların avtomatlaşdırılması: PL/pgSQL ilə rutin əməliyyatları, məsələn, data update, loglama və ya məlumatın bütövlüyünü yoxlamaq kimi işləri avtomatlaşdıra bilərsən.
  4. Biznes-məntiq: PL/pgSQL ilə mürəkkəb biznes-məntiqi, məsələn, hesablamalar, yoxlamalar və ya analitik hesabatların yaradılması rahat şəkildə yazılır.
  5. Rahatlıq və oxunaqlılıq: PL/pgSQL kodunu rahat strukturlaşdırmaq, function-lara bölmək və təkmilləşdirmək olur, bu da onu support üçün əlverişli edir.

PL/pgSQL-in istifadə sahələri

İndi isə baxaq, PL/pgSQL harada və necə real problemləri həll edir.

  1. Rutin əməliyyatların avtomatlaşdırılması

PL/pgSQL təkrarlanan task-ları avtomatlaşdırmağa imkan verir. Məsələn, hər gün müəyyən datanı yeniləmək və ya periodik analiz etmək lazımdırsa, PL/pgSQL function yaradıb onu task scheduler-lə (məsələn, pg_cron) birləşdirə bilərsən ki, müəyyən vaxtda avtomatik işləsin.

Nümunə: status-un avtomatik yenilənməsi

CREATE FUNCTION update_student_status() RETURNS VOID AS $$
BEGIN
    UPDATE students
    SET status = 'passiv'
    WHERE last_login < NOW() - INTERVAL '1 year';
    RAISE NOTICE 'Tələbələrin statusu yeniləndi.';
END;
$$ LANGUAGE plpgsql;

Bu function, məsələn, bir ildir sistemə daxil olmayan tələbələrə avtomatik "passiv" statusu verir.

  1. Hesabatların generasiyası

PL/pgSQL analitik hesabatların yaradılması üçün əladır, çünki bir neçə cədvəldən data toplamaq və birləşdirmək lazımdır. Hesabatların avtomatik generasiyası və ayrıca cədvəllərə yazılması üçün procedure-lar yarada bilərsən.

Nümunə: fakültələr üzrə tələbə sayı hesabatı

CREATE FUNCTION generate_faculty_report() RETURNS TABLE (faculty_id INT, student_count INT) AS $$
BEGIN
    RETURN QUERY
    SELECT faculty_id, COUNT(*)
    FROM students
    GROUP BY faculty_id;
END;
$$ LANGUAGE plpgsql;

Bu function-u çağırandan sonra bütün fakültələr üzrə statistik məlumat alacaqsan.

  1. Cədvəllərdə dəyişikliklərin loglanması

Loglama — database cədvəllərindəki dəyişikliklərin qeydiyyatıdır. PL/pgSQL ilə bunu effektiv etmək olur, məsələn, trigger-lərlə.

Dəyişiklikləri loglamaq üçün function nümunəsi

CREATE FUNCTION log_changes() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO change_logs(table_name, operation, old_data, new_data, changed_at)
    VALUES (TG_TABLE_NAME, TG_OP, ROW_TO_JSON(OLD), ROW_TO_JSON(NEW), NOW());
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Bu function change_logs cədvəlinə hansı cədvəldə dəyişiklik olub, hansı əməliyyat aparılıb (INSERT, UPDATE, DELETE kimi), həmçinin köhnə və yeni datanı yazır.

  1. Mürəkkəb alqoritmlərin reallaşdırılması

PL/pgSQL ilə standart SQL-in imkanlarından kənara çıxan alqoritmləri proqramlaşdıra bilərsən. Məsələn, xərclərin hesablanması, biznes qaydalarının yoxlanması və ya avtomatik ID generasiyası kimi işlər.

Nümunə: unikal identifikatorun generasiyası

CREATE FUNCTION generate_unique_id() RETURNS TEXT AS $$
BEGIN
    RETURN CONCAT('UID-', EXTRACT(EPOCH FROM NOW()), '-', RANDOM()::TEXT);
END;
$$ LANGUAGE plpgsql;

Bu function cari zaman möhürü və random ədəd əlavə etməklə unikal identifikator yaradır.

  1. Trigger-lərlə işləmək

Trigger-lər və PL/pgSQL bir-birini tamamlayır. Əgər hansısa işi avtomatlaşdırmaq lazımdırsa, məsələn, əlaqəli datanı yeniləmək, PL/pgSQL function-lu trigger-lər ideal seçimdir.

Nümunə: tələbələrin silinməsi üçün trigger

CREATE FUNCTION handle_delete_students() RETURNS TRIGGER AS $$
BEGIN
    DELETE FROM enrollments WHERE student_id = OLD.id;
    RAISE NOTICE 'Tələbə üçün enrollments silindi: %.', OLD.id;
    RETURN OLD;
END;
$$ LANGUAGE plpgsql;

Bu function ilə, məsələn, students cədvəlindən tələbə silinəndə, onun enrollments cədvəlindəki qeydiyyatları da avtomatik silinir.

  1. Error handling

Mürəkkəb task-larda error handling çox vacib olur. PL/pgSQL EXCEPTION bloku ilə error-ları tutub işləyə bilərsən.

Nümunə: error handling

CREATE FUNCTION insert_student(name TEXT, faculty_id INT) RETURNS VOID AS $$
BEGIN
    INSERT INTO students(name, faculty_id) VALUES (name, faculty_id);
EXCEPTION
    WHEN FOREIGN_KEY_VIOLATION THEN
        RAISE NOTICE 'Fakültə ID % mövcud deyil!', faculty_id;
END;
$$ LANGUAGE plpgsql;

Burada, əgər bazada olmayan fakültə üçün dəyər daxil edilərsə, proqram dayanmır, əvəzinə xəbərdarlıq çıxır.

PL/pgSQL ilə həll olunan mürəkkəb task nümunələri

Səni PL/pgSQL-dən istifadə etməyə həvəsləndirmək üçün, bax belə task-ları onunla həll etmək olur:

  1. Online mağazada endirimlərin avtomatik yenilənməsi Hər gün aksiyası bitən məhsullar üçün endirimləri avtomatik yeniləyən function.

  2. Data yoxlanışı və düzəldilməsi Cədvəldə təkrarlanan qeydləri yoxlayıb silən function.

  3. Konfiqurasiyaların tez dəyişdirilməsi Sistem parametrlərini dəyişməyə imkan verən function, məsələn, tətbiqin iş rejimini dəyişmək üçün.

IT dünyasından real nümunələr

PL/pgSQL dünyada milyonlarla şirkət tərəfindən istifadə olunur. Məsələn:

  • Online mağazalar vergi hesablanması, endirimlərin avtomatik yenilənməsi və satış hesabatlarının generasiyası üçün function-lardan istifadə edir.
  • Banklar gündə minlərlə əməliyyatı, faiz hesablanmasından kredit reytinqinin yoxlanmasına qədər, PL/pgSQL ilə həll edir.
  • Sosial şəbəkələr data processing üçün mürəkkəb alqoritmlər tətbiq edir, məsələn, dost tövsiyəsi üçün.

PL/pgSQL — PostgreSQL ilə işləyən proqramçılar üçün bir növ İsveçrə bıçağıdır. O, database ilə işi sadələşdirir və adi SQL-də ya çox çətin, ya da mümkün olmayan task-ları həll etməyə imkan verir. Ən əsası isə — PL/pgSQL öyrənmək asandır və onunla hər kəs özünü əsl database ustası kimi hiss edə bilər.

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