Bağlam yığınını yakalama
Yığın bağlamını almak, diğer dillerdeki stack trace’e benzer ve karmaşık ile iç içe geçmiş fonksiyonları hata ayıklamak için çok güçlü bir yöntemdir.
Aşağıdaki kodda, yığın bağlamını yakalayıp her iki iç içe bloktaki özel durum işleyicilerinde kaydetmek istiyoruz. Ardından, bu fonksiyondaki özel duruma neyin sebep olduğunu anlamaya yardımcı olması için çıktılarını errors tablosunda incelemek istiyoruz.
Bu egzersiz
PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi
kursunun bir parçasıdırEgzersiz talimatları
- Yığın bağlamını tutmak için
exc_contextadlı bir text değişkeni bildir. - İlk işleyicide
PG_EXCEPTION_CONTEXTdeğeriniexc_contextdeğişkenimize kaydet. - İkinci işleyicide
PG_EXCEPTION_DETAILdeğeriniexc_detaildeğişkenimize kaydet. - Her iki blokta da hem hata iletisini hem de yığın bağlamını kaydet.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
DO $$
DECLARE
exc_message text;
exc_details text;
-- Declare a variable, exc_context to hold the exception context
___ ___;
BEGIN
BEGIN
INSERT INTO patients (a1c, glucose, fasting) values (5.6, 93, TRUE),
(6.3, 111, TRUE),(4.7, 65, TRUE);
EXCEPTION
WHEN others THEN
-- Store the exception context in exc_context
GET STACKED DIAGNOSTICS exc_message = MESSAGE_TEXT,
___ = ___;
-- Record both the msg and the context
INSERT INTO errors (msg, context)
VALUES (___, ___);
END;
BEGIN
UPDATE patients set fasting = 'true' where id=1;
EXCEPTION
WHEN others THEN
-- Store the exception detail in exc_details
GET STACKED DIAGNOSTICS exc_message = MESSAGE_TEXT,
___ = ___;
INSERT INTO errors (___, ___)
VALUES (exc_message, exc_context);
END;
END$$;
SELECT * FROM errors;