BaşlayınÜcretsiz Başlayın

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ır
Kursu Görüntüle

Egzersiz talimatları

  • Yığın bağlamını tutmak için exc_context adlı bir text değişkeni bildir.
  • İlk işleyicide PG_EXCEPTION_CONTEXT değerini exc_context değişkenimize kaydet.
  • İkinci işleyicide PG_EXCEPTION_DETAIL değerini exc_detail değ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;
Kodu Düzenle ve Çalıştır