Loglama — tətbiqin və ya verilənlər bazasının işində vacib hadisələrin və məlumatların yazılması prosesidir. PL/pgSQL-də bu xüsusilə faydalıdır, çünki sən kompleks funksiyalar yaradırsan, başqa funksiyaları çağırırsan, trigger-lərlə işləyirsən və ya bir neçə addım yerinə yetirirsən. Budur loglamanın niyə vacib olduğuna dair əsas səbəblər:
- Kodu debug etmək: loglama sənə hər bir mərhələdə funksiyanın nə etdiyini başa düşməyə kömək edir.
- Problemlərin diaqnostikası: əgər funksiya gözlədiyin kimi işləmir, loglar səhvin harada baş verdiyini tapmağa kömək edəcək.
- İcra analizləri: hansı addımların (və hansı ardıcıllıqla) yerinə yetirildiyini bilsən, performansı optimallaşdıra və ya yaxşılaşdırmaq üçün məqamlar tapa bilərsən.
- Saxlanmada rahatlıq: təsəvvür elə, bir ildən sonra funksiyanı açırsan və necə işlədiyini başa düşmürsən (bu olacaq, inan). Belə hallarda loglar köməyə gəlir.
RAISE NOTICE — loglamanın əsası
Əgər sən proqramçısansa və nə vaxtsa print() və ya console.log() ilə debug etmisənsə, RAISE NOTICE onların PostgreSQL dünyasında böyük qardaşıdır. Bu, funksiyanın icrası zamanı informasiya mesajlarını çıxaran komandadır. Bu mesajlar konsolda, terminalda və ya sorğunu icra etdiyin interfeysə görünür.
RAISE NOTICE sintaksisi
RAISE NOTICE 'İcra barədə mesaj';
Amma bu yalnız başlanğıcdır. Mesajlarına dəyişənləri də əlavə edə bilərsən ki, onlar daha informativ olsun:
RAISE NOTICE 'Dəyişənin cari dəyəri: %', my_variable;
Burada % placeholder rolunu oynayır, my_variable isə çıxarmaq istədiyin dəyişəndir.
Əgər bir neçə dəyişəni çıxarmaq lazımdırsa, bunu belə edə bilərsən:
RAISE NOTICE 'Dəyərlər: % və %', var1, var2;
RAISE NOTICE istifadəsinə nümunələr
1. Dəyişənin dəyərinin çıxarılması. Funksiyada dəyişən elan edək və onun dəyərini RAISE NOTICE ilə çıxaraq.
CREATE OR REPLACE FUNCTION debug_variable_example()
RETURNS VOID AS $$
DECLARE
my_variable INTEGER := 42;
BEGIN
RAISE NOTICE 'my_variable dəyişəninin dəyəri: %', my_variable;
END;
$$ LANGUAGE plpgsql;
Bu funksiyanı çağıranda:
SELECT debug_variable_example();
Nəticədə belə bir şey görəcəksən:
NOTICE: my_variable dəyişəninin dəyəri: 42
2. İcra addımlarının loglanması. Təsəvvür elə ki, bir neçə addım yerinə yetirən funksiya var. Hər bir əməliyyatdan sonra RAISE NOTICE əlavə edə bilərsən ki, hər şey plan üzrə gedir ya yox, görəsən.
CREATE OR REPLACE FUNCTION process_data()
RETURNS VOID AS $$
BEGIN
RAISE NOTICE 'Addım 1: prosesin başlanğıcı';
-- Burada hansısa SQL kodu icra olunur
PERFORM pg_sleep(1); -- Əməliyyatın simulyasiyası
RAISE NOTICE 'Addım 2: proses davam edir';
-- Bir az da SQL
PERFORM pg_sleep(1); -- Əməliyyatın simulyasiyası
RAISE NOTICE 'Addım 3: proses bitdi';
END;
$$ LANGUAGE plpgsql;
Funksiyanı çağıranda:
SELECT process_data();
Belə nəticə alacaqsan:
NOTICE: Addım 1: prosesin başlanğıcı
NOTICE: Addım 2: proses davam edir
NOTICE: Addım 3: proses bitdi
İndi həmişə biləcəksən ki, icra hansı mərhələdədir.
Praktiki tətbiq
Gəlin, hesablamaların loglanması barədə nümunəyə baxaq. 1-dən N-ə qədər ədədlərin cəmini hesablayan və prosesi loglayan funksiya yaradaq:
CREATE OR REPLACE FUNCTION sum_with_logging(n INTEGER)
RETURNS INTEGER AS $$
DECLARE
total INTEGER := 0;
i INTEGER;
BEGIN
RAISE NOTICE 'n = % üçün hesablamaların başlanğıcı', n;
FOR i IN 1..n LOOP
total := total + i;
RAISE NOTICE 'Addım % üçün cəm: %', i, total;
END LOOP;
RAISE NOTICE 'Hesablamaların nəticəsi: %', total;
RETURN total;
END;
$$ LANGUAGE plpgsql;
Bu funksiyanı 5 parametri ilə çağıranda:
SELECT sum_with_logging(5);
Belə nəticə alacaqsan:
NOTICE: n = 5 üçün hesablamaların başlanğıcı
NOTICE: Addım 1 üçün cəm: 1
NOTICE: Addım 2 üçün cəm: 3
NOTICE: Addım 3 üçün cəm: 6
NOTICE: Addım 4 üçün cəm: 10
NOTICE: Addım 5 üçün cəm: 15
NOTICE: Hesablamaların nəticəsi: 15
Loglama üçün faydalı məsləhətlər
- Lazımsız loglardan qurtul: funksiyan hazır və debug olunubsa, artıq
RAISE NOTICEmesajlarını sil ki, terminalı və ya istifadəçi interfeysini zibilləməsin. - Mənalı mesajlar yaz: sadəcə "Addım 1", "Addım 2" yazma. Hansı addımın icra olunduğunu başa sal.
- Həssas məlumatlara diqqət et: heç vaxt loglara kredit kartı məlumatları, parollar və ya başqa məxfi məlumatlar əlavə etmə.
GO TO FULL VERSION