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
Petunjuk latihan
- Deklarasikan sebuah variabel teks,
exc_context, untuk menampung context stack. - Simpan
PG_EXCEPTION_CONTEXTke dalam variabelexc_contextpada handler pertama. - Simpan
PG_EXCEPTION_DETAILke dalam variabelexc_detailpada 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;