PlusMagi's Blog By Pitt Phunsanit Backend,Database PowerScript Language Basics: ตัวแปร (Global, Instance, Shared, Local), Data Types และการใช้งาน Structure

PowerScript Language Basics: ตัวแปร (Global, Instance, Shared, Local), Data Types และการใช้งาน Structure

ในฐานะสถาปนิกระบบ (System Architect) การจัดการข้อมูลและสถานะของแอปพลิเคชันขนาดใหญ่ถือเป็นหัวใจสำคัญที่กำหนดความเสถียรและความสามารถในการขยายตัว (Scalability) ของระบบฐานข้อมูล ไม่ว่าจะเป็นการสร้างระบบ Transactional หรือ Data Warehouse นักพัฒนาจำเป็นต้องเข้าใจถึงกลไกพื้นฐานของการจัดเก็บและเรียกใช้ข้อมูลอย่างลึกซึ้ง เพื่อให้โค้ดทำงานได้อย่างถูกต้องและมีประสิทธิภาพสูงสุดในระดับ PostgreSQL

การจัดการขอบเขตตัวแปร (Variable Scopes) ใน PostgreSQL

ในบริบทของ PostgreSQL การจัดการขอบเขตของตัวแปร (Variable Scope) มีความสำคัญอย่างยิ่งต่อการป้องกันปัญหา Side Effect และการทำงานที่คาดเดาไม่ได้ PostgreSQL แยกขอบเขตหลัก ๆ ออกเป็น 3 ระดับ คือ:

  • Local Scope: ตัวแปรที่ถูกประกาศและใช้งานภายในขอบเขตของฟังก์ชัน (Function) หรือบล็อกโค้ด (PL/pgSQL block) นั้น ๆ เท่านั้น เมื่อฟังก์ชันจบลง ตัวแปรนี้จะถูกทำลาย
  • Session Scope (Global): ตัวแปรที่ถูกกำหนดค่าในระดับ Session (เช่น การใช้คำสั่ง SET) ตัวแปรเหล่านี้จะคงอยู่ตลอดช่วงเวลาที่การเชื่อมต่อ (Connection) ยังเปิดอยู่
  • Transaction Scope: ข้อมูลที่ถูกจัดการภายใน Transaction เดียวกัน ซึ่งรับประกันความสอดคล้องของข้อมูล (ACID Properties)

การเลือกใช้ขอบเขตที่เหมาะสมช่วยให้โค้ดมีความเป็นระเบียบสูงและจัดการทรัพยากรได้อย่างมีประสิทธิภาพ

Data Types และการสร้างโครงสร้างข้อมูล (Composite Types)

รากฐานของการออกแบบโมเดลข้อมูลที่ดีคือการรู้จัก Data Types พื้นฐานของ PostgreSQL (เช่น VARCHAR, INTEGER, BOOLEAN, JSONB) และการใช้ Composite Types เพื่อรวมกลุ่มข้อมูลที่เกี่ยวข้องกันให้เป็นหน่วยเดียว

การใช้ Composite Types ทำให้เราสามารถจำลองโครงสร้างข้อมูลที่ซับซ้อนได้โดยตรงในระดับฐานข้อมูล ซึ่งมีประโยชน์อย่างยิ่งในการส่งผ่านข้อมูลที่ซับซ้อนระหว่างฟังก์ชันหรือระหว่างระบบต่าง ๆ

SQL

-- 1. การสร้าง Composite Type เพื่อจำลองโครงสร้างข้อมูล (Structure)
CREATE TYPE address_type AS (street VARCHAR, city VARCHAR, zip_code VARCHAR);

-- 2. การใช้ Type นี้ในตาราง
CREATE TABLE user_profile (
    user_id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    location address_type
);

-- 3. การแทรกข้อมูลที่ใช้โครงสร้างที่กำหนด
INSERT INTO user_profile (name, location) VALUES (
    'John Doe',
    ROW('123 Main St', 'Bangkok', '10110')::address_type
);

ตัวอย่างการจัดการขอบเขตตัวแปรใน PL/pgSQL

ตัวอย่างนี้แสดงความแตกต่างระหว่างตัวแปรที่ประกาศในฟังก์ชัน (Local Scope) กับตัวแปรที่ถูกกำหนดในระดับ Session (Global Scope):

SQL

-- ตัวแปร 'local_var' มีขอบเขตจำกัดแค่ภายในฟังก์ชันเท่านั้น
DO $$
DECLARE
    local_var INTEGER := 10; -- Local Scope
BEGIN
    RAISE NOTICE 'Local Scope: %', local_var; -- แสดงผลภายในบล็อก
END $$; -- เมื่อจบบล็อก ตัวแปร local_var จะหายไป

-- ตัวแปร 'session_var' มีขอบเขตทั่วทั้งเซสชัน
SET session.user_count = '5'; -- Global/Session Scope
SELECT current_setting('session.user_count'); -- สามารถเรียกใช้ได้จนกว่า Connection จะปิด

บทสรุป

การเข้าใจถึงกลไกของขอบเขตตัวแปร (Local vs. Session) การเลือกใช้ Data Types ที่เหมาะสม และการใช้ Composite Types เพื่อสร้างโครงสร้างข้อมูลที่ชัดเจน เป็นรากฐานที่สำคัญที่สุดในการออกแบบระบบด้วย PostgreSQL ที่มีประสิทธิภาพสูง การจัดการข้อมูลเหล่านี้อย่างเป็นระเบียบจะช่วยให้แอปพลิเคชันของคุณมีความเสถียรสูง (Robust) และพร้อมสำหรับการขยายตัวในอนาคต

Exit mobile version