例外を丁寧に処理する

PostgreSQL におけるトランザクションとエラー処理

Jason Myers

Principal Engineer

優雅な劣化の実例

DO $$
BEGIN
    UPDATE cookies SET quantity = quantity-6 WHERE name = 'Linga';
EXCEPTION 
    WHEN check_violation THEN
        INSERT INTO errors (msg) values ('Quantity can not be less than 0');
        UPDATE cookies SET quantity = 0 WHERE name = 'Linga';
        INSERT INTO errors (msg) values ('Set quantity to the 0 for Linga.');
END$$;
PostgreSQL におけるトランザクションとエラー処理

優雅な劣化を使う場面

  • 外部システムからの読込時、null を 0 に置換したい場合
  • 計測器の精度がある閾値までに限られる場合
  • 範囲外の日付を受け取り、番兵値に設定したい場合
  • 例外を起こしたレコードを別テーブルに書き出し、後で処理する場合
PostgreSQL におけるトランザクションとエラー処理

例外処理の活用を検討すべきとき

  • 新しい値が合計や平均などの集計で隠れる場合。
  • 新しい値が時系列データに影響する場合。
PostgreSQL におけるトランザクションとエラー処理

演習に進みましょう

PostgreSQL におけるトランザクションとエラー処理

Preparing Video For Download...