ป้ายกำกับ: Pl/pgsql

Middleware & Request Pipeline (HTTP Pipeline, Custom Middleware, Exception Handling)Middleware & Request Pipeline (HTTP Pipeline, Custom Middleware, Exception Handling)

ในโลกของการประมวลผลข้อมูลระดับ Enterprise การรับประกันความสมบูรณ์ ความถูกต้อง และความปลอดภัยของข้อมูล (Data Integrity) ไม่ได้ขึ้นอยู่กับการเขียน Query เพียงอย่างเดียว แต่ต้องอาศัยการออกแบบกระบวนการที่ซับซ้อน ซึ่งในเชิงสถาปัตยกรรมข้อมูล เราเรียกแนวคิดนี้ว่า ‘Data Pipeline’ หรือ ‘Middleware’ การทำความเข้าใจกลไกเหล่านี้เป็นกุญแจสำคัญในการสร้างระบบฐานข้อมูลที่เชื่อถือได้และสามารถขยายขนาดได้ (Scalable) โดยเฉพาะอย่างยิ่งเมื่อใช้ PostgreSQL

Middleware และ Request Pipeline ในบริบทของ PostgreSQL

สำหรับระบบฐานข้อมูลอย่าง PostgreSQL แนวคิดของ Middleware และ Request Pipeline จะถูกจำลองผ่านกลไกที่ทรงพลังอย่าง Triggers, Stored Procedures, และการจัดการ Transaction ภายในภาษา PL/pgSQL แทนที่จะเป็น HTTP Request Middleware หน้าที่ของมันคือการตรวจสอบ (Validation), การปรับเปลี่ยนข้อมูล (Transformation), และการบังคับใช้กฎทางธุรกิจ (Business Logic) ก่อนที่คำสั่ง DML (Data Manipulation Language) จะถูกดำเนินการจริง

1. การจำลอง Middleware ด้วย Triggers

Triggers ทำหน้าที่เป็น ‘Interceptor’ หรือ Middleware ที่ทำงานโดยอัตโนมัติก่อน (BEFORE) หรือหลัง (AFTER) การดำเนินการใดๆ บนตาราง ทำให้เราสามารถตรวจสอบเงื่อนไขที่ซับซ้อนได้ ตัวอย่างเช่น การบังคับให้ข้อมูลที่ถูกบันทึกต้องอยู่ในรูปแบบที่กำหนด หรือการอัปเดต Audit Log ทันทีที่ข้อมูลหลักมีการเปลี่ยนแปลง

SQL

-- สร้างตารางตัวอย่าง: products(id, name, price)

SQL

CREATE TABLE products (id INT PRIMARY KEY, name VARCHAR(100), price NUMERIC);

เราสามารถสร้าง Trigger เพื่อตรวจสอบว่าราคาสินค้าต้องไม่เป็นลบ:

SQL

CREATE OR REPLACE FUNCTION validate_price() RETURNS TRIGGER AS $$

SQL

BEGIN

SQL

IF NEW.price < 0 THEN

SQL

RAISE EXCEPTION 'Price cannot be negative.';

SQL

END IF;

SQL

RETURN NEW;

SQL

END;

SQL

$$ LANGUAGE plpgsql;

SQL

CREATE TRIGGER trg_validate_price BEFORE INSERT ON products FOR EACH ROW EXECUTE FUNCTION validate_price();

2. การจัดการข้อผิดพลาด (Exception Handling)

กลไก EXCEPTION ใน PL/pgSQL คือ ‘Safety Net’ ที่สำคัญที่สุด ทำหน้าที่ดักจับข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการประมวลผล (เช่น การเชื่อมต่อล้มเหลว, การแปลงข้อมูลผิดพลาด, หรือการละเมิดข้อจำกัด) แทนที่จะปล่อยให้ระบบล่ม (Error 500) ฟังก์ชันของเราจะสามารถบันทึก Log และส่งคืนข้อความผิดพลาดที่เข้าใจได้

SQL

CREATE OR REPLACE FUNCTION process_order(item_id INT, quantity INT) RETURNS TEXT AS $$

SQL

BEGIN

SQL

-- สมมติว่ามีการเรียกใช้ฟังก์ชันที่อาจเกิดข้อผิดพลาด

SQL

INSERT INTO orders (item_id, quantity) VALUES (item_id, quantity);

SQL

RETURN 'Order processed successfully.';

SQL

EXCEPTION

SQL

WHEN foreign_key_violation THEN

SQL

RETURN 'Error: Item ID does not exist.';

SQL

WHEN others THEN

SQL

RETURN 'An unexpected database error occurred: ' || SQLERRM;

SQL

END;

SQL

$$ LANGUAGE plpgsql;

สรุป: การออกแบบสถาปัตยกรรมที่แข็งแกร่ง

การใช้ Triggers และ PL/pgSQL Exception Handling ทำให้เราสามารถสร้างชั้นของ Middleware และ Pipeline ภายในตัวฐานข้อมูลได้โดยตรง สิ่งนี้ช่วยให้มั่นใจได้ว่ากฎทางธุรกิจจะถูกบังคับใช้ในระดับที่ต่ำที่สุด (Lowest Level) ของระบบ ทำให้แอปพลิเคชันที่เชื่อมต่อกับ PostgreSQL มีความเสถียร ปลอดภัย และมีประสิทธิภาพสูงอย่างแท้จริง