MulaiMulai sekarang secara gratis

Menangkap context stack

Mendapatkan context stack, yang mirip dengan stack trace di bahasa lain, adalah cara yang kuat untuk melakukan debug fungsi yang kompleks dan bertingkat (nested).

Pada kode di bawah, Anda ingin menangkap context stack dan mencatatnya di exception handler pada kedua blok bersarang. Lalu, tinjau keluarannya di tabel errors untuk membantu men-debug penyebab pengecualian pada fungsi ini.

Latihan ini adalah bagian dari kursus

Transaksi dan Penanganan Error di PostgreSQL

Lihat Kursus

Petunjuk latihan

  • Deklarasikan sebuah variabel teks, exc_context, untuk menampung context stack.
  • Simpan PG_EXCEPTION_CONTEXT ke dalam variabel exc_context pada handler pertama.
  • Simpan PG_EXCEPTION_DETAIL ke dalam variabel exc_detail pada handler kedua.
  • Catat baik pesan kesalahan maupun context stack di kedua blok.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

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;
Edit dan Jalankan Kode