İstisnaları yakalama

PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi

Jason Myers

Principal Engineer

Hata veren ifadeler

INSERT INTO sales (name, quantity, cost) 
VALUES 
  ('chocolate chip', 6, null);
ERROR:  "cost" sütununda null değeri not-null kısıtını ihlal ediyor
DETAIL:  Başarısız satır şunu içeriyor 
(1, "chocolate chip", 6, null, 2020-04-28 19:58:55.715886).
PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi

Genel istisna yakalama

R

tryCatch(
  sqrt("a"), 
  error=function(e) 
    print("Boom!")
)

Python

try:
   math.sqrt("a")
except Exception as e:
   print("Boom!")

PL/pgSQL

BEGIN 
SELECT 
  SQRT("a");
EXCEPTION WHEN others THEN RAISE INFO 'Boom!';
END;

Sonuçlar

     R: Boom!
Python: Boom!
   SQL: INFO: Boom!
PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi

PL/pgSQL DO komutları (anonim fonksiyonlar)

DO $$

DECLARE some_variable text;
BEGIN SELECT text from a table; END;
$$ language 'plpgsql';
PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi

İstisna işleme fonksiyonu

DO $$
BEGIN
    SELECT SQRT("a");
EXCEPTION
    WHEN others THEN
       INSERT INTO errors (msg) VALUES ('Bir dizgenin karekökü alınamaz.');
       RAISE INFO 'Bir dizgenin karekökü alınamaz.';
END; 
$$ language 'plpgsql';
PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi

İstisna işlemesini akıllıca kullanma

  • EXCEPTION maddesi eklemek ciddi ek yük getirir
  • Python veya R istisna işlemesi daha verimlidir
  • İstisnayı çözmek için doğru bağlamı feda etmeyin
  • İstisnalarınızı anlamadan optimize etmeyin
1 https://www.postgresql.org/docs/12/plpgsql-control-structures.html {{1}}
PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi

Veri kümelerini değiştirme

patients

column type
patient_id integer
a1c double (float)
glucose integer
fasting boolean
created_on timestamp

errors

column type
error_id integer
state string
msg string
detail string
context string
PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi

Hadi pratik yapalım!

PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi

Preparing Video For Download...