SSMS: group by schema name

ในฐานะ Senior Architect การเข้าใจโครงสร้างของฐานข้อมูลอย่างลึกซึ้งเป็นสิ่งสำคัญอย่างยิ่ง โดยเฉพาะอย่างยิ่งเมื่อฐานข้อมูลของคุณมีการแบ่งการทำงานออกเป็นหลายส่วน (Multi-tenant) ซึ่งถูกจัดการด้วยแนวคิดของ Schema (สคีมา)

Schema ใน PostgreSQL ทำหน้าที่เป็นคอนเทนเนอร์เชิงตรรกะที่ใช้จัดกลุ่ม Object ต่างๆ เช่น ตาราง (Tables), มุมมอง (Views), และฟังก์ชัน (Functions) การจัดการ Schema ให้เป็นระเบียบและสามารถมองเห็นการจัดกลุ่มได้อย่างชัดเจน ไม่เพียงแต่ช่วยให้การดูแลรักษาง่ายขึ้น แต่ยังช่วยลดความเสี่ยงในการเรียกใช้ Object ผิดที่อีกด้วย

Schema Grouping ใน PostgreSQL: มุมมองเชิงสถาปัตยกรรม

ในเครื่องมือจัดการฐานข้อมูล (GUI Tools) อย่าง DBeaver หรือ pgAdmin มักจะมีการจัดกลุ่ม Schema ให้ผู้ใช้เห็นเป็นโฟลเดอร์อย่างชัดเจน แต่ในระดับของนักพัฒนาหรือ System Specialist ที่ต้องทำงานผ่านโค้ด (Code-First Approach) การพึ่งพาการแสดงผลของ GUI อาจไม่เพียงพอ เราจึงต้องใช้คำสั่ง SQL เพื่อดึงข้อมูล Schema ทั้งหมดออกมาในรูปแบบที่จัดกลุ่มและอ่านง่ายที่สุด

ทำไมต้องจัดการ Schema ผ่าน SQL?

การ Query ข้อมูล Schema โดยตรงจาก System Catalogs ของ PostgreSQL เช่น information_schema เป็นวิธีที่แม่นยำและเป็นมาตรฐานที่สุดในการตรวจสอบโครงสร้างทั้งหมดของฐานข้อมูล ไม่ว่าเครื่องมือที่คุณใช้จะแสดงผลอย่างไร การ Query ข้อมูลโดยตรงจะให้ผลลัพธ์ที่เชื่อถือได้ 100% ซึ่งเป็นหลักการที่สถาปนิกข้อมูลที่ดีควรยึดถือ

การ Query Schema และ Tables พร้อมการจัดกลุ่ม (Grouping)

เราสามารถใช้คำสั่ง JOIN ระหว่าง information_schema.schemata และ information_schema.tables เพื่อดึงรายการ Schema ทั้งหมด และแสดงรายการตารางที่อยู่ภายใต้ Schema นั้นๆ พร้อมกัน การใช้ GROUP BY จะช่วยให้ผลลัพธ์ที่ได้ถูกจัดกลุ่มตามชื่อ Schema อย่างเป็นระเบียบ

นี่คือตัวอย่างโค้ด SQL สำหรับการดึงข้อมูล Schema และตารางที่อยู่ใน Schema นั้นๆ:

SQL

SELECT
    s.schema_name AS schema_group,
    c.table_name AS table_name,
    c.table_type
FROM
    information_schema.tables c
JOIN
    information_schema.schemata s ON c.table_schema = s.schema_name
WHERE
    s.schema_name NOT IN ('pg_catalog', 'information_schema')
    AND c.table_type IN ('BASE TABLE', 'VIEW')
ORDER BY
    schema_group, table_name;

คำอธิบายโค้ด

  • information_schema.tables: แหล่งข้อมูลที่เก็บข้อมูลตารางทั้งหมด
  • information_schema.schemata: แหล่งข้อมูลที่เก็บข้อมูล Schema ทั้งหมด
  • WHERE s.schema_name NOT IN (...): ส่วนนี้มีความสำคัญอย่างยิ่ง เพราะเราต้องการกรอง Schema ระบบ (System Schemas) เช่น pg_catalog ออกไป เพื่อให้เห็นเฉพาะ Schema ที่ผู้ใช้งานสร้างขึ้นจริงเท่านั้น
  • ORDER BY schema_group, table_name: การจัดเรียงผลลัพธ์ตามชื่อ Schema ก่อน แล้วจึงตามชื่อตาราง ทำให้ผลลัพธ์ที่ได้ถูกจัดกลุ่มอย่างสมบูรณ์แบบ

บทสรุป: Best Practice ในการจัดการ Schema

การจัดการ Schema ที่มีประสิทธิภาพใน PostgreSQL ไม่ได้ขึ้นอยู่กับเครื่องมือ GUI เพียงอย่างเดียว แต่ต้องอาศัยความเข้าใจใน System Catalogs และการใช้คำสั่ง SQL ที่ถูกต้องเพื่อดึงข้อมูลออกมาในรูปแบบที่จัดกลุ่มอย่างเป็นระบบ การใช้ Query ข้างต้นถือเป็น Best Practice ที่ช่วยให้คุณสามารถตรวจสอบโครงสร้างฐานข้อมูลที่ซับซ้อนได้อย่างรวดเร็วและแม่นยำ ซึ่งเป็นทักษะสำคัญที่นักพัฒนาและสถาปนิกข้อมูลทุกคนควรมี

Exit mobile version