ในฐานข้อมูลเชิงสัมพันธ์ (Relational Database) การจัดการและเรียกดูโครงสร้างของตาราง (Tables) ที่จัดเก็บอยู่ใน Schema เป็นทักษะพื้นฐานที่สำคัญสำหรับนักพัฒนาและ System Administrator การทราบว่าตารางใดมีอยู่บ้างในระบบโดยที่ไม่มีการจำชื่อตารางโดยตรงนั้น สามารถทำได้โดยการ Query ไปยัง Metadata View ของระบบ
สำหรับ PostgreSQL นั้น ข้อมูลเมตาเหล่านี้จะถูกจัดเก็บอยู่ในระบบที่เรียกว่า information_schema ซึ่งเป็นมาตรฐานที่ช่วยให้เราสามารถดึงข้อมูลเกี่ยวกับโครงสร้างของฐานข้อมูลได้อย่างเป็นระบบ บทความนี้จะแนะนำวิธีการ List ตารางใน Schema ต่างๆ ของ PostgreSQL อย่างละเอียด
1. การดูตารางทั้งหมดในฐานข้อมูล (Database-wide View)
หากคุณต้องการดูรายการตารางทั้งหมดที่ถูกสร้างขึ้นในฐานข้อมูล โดยไม่จำกัดว่าตารางนั้นอยู่ใน Schema ใด คุณควรใช้ information_schema.tables การ Query นี้จะให้มุมมองที่กว้างที่สุดของโครงสร้างทั้งหมด
SQL
SQL
SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog', 'information_schema') ORDER BY table_schema, table_name;
คำอธิบาย: การกรอง WHERE table_schema NOT IN (...) มีความสำคัญอย่างยิ่ง เพราะเป็นการยกเว้น Schema ระบบ (เช่น pg_catalog และ information_schema) ออกไป เพื่อให้เราเห็นเฉพาะตารางที่ผู้ใช้สร้างขึ้นจริงเท่านั้น
2. การดูตารางใน Schema ของผู้ใช้ปัจจุบัน (Own Schema)
เมื่อคุณเข้าสู่ระบบ (Login) ด้วย User ใด User หนึ่ง และต้องการดูเฉพาะตารางที่ User นั้นเป็นเจ้าของและสร้างขึ้นเอง คุณสามารถใช้ฟังก์ชัน current_schema() ร่วมกับ information_schema.tables เพื่อจำกัดขอบเขตการค้นหาให้แคบลง
SQL
SQL
SELECT table_name FROM information_schema.tables WHERE table_schema = current_schema() ORDER BY table_name;
ข้อดี: วิธีนี้มีความปลอดภัยและแม่นยำสูง เพราะรับประกันว่าตารางที่ถูก List ออกมาเป็นตารางที่ User ปัจจุบันมีสิทธิ์เข้าถึงและเป็นเจ้าของโดยตรง
3. การดูตารางใน Schema ที่ระบุ (Specific Schema)
หากคุณทราบชื่อ Schema ที่ต้องการตรวจสอบ (เช่น ‘sales’ หรือ ‘hr’) และต้องการดูตารางทั้งหมดที่อยู่ใน Schema นั้นโดยเฉพาะ คุณสามารถระบุชื่อ Schema ลงในเงื่อนไข WHERE ได้โดยตรง
SQL
SQL
SELECT table_name FROM information_schema.tables WHERE table_schema = 'ชื่อ_SCHEMA_ที่ต้องการ' AND table_type = 'BASE TABLE' ORDER BY table_name;
หมายเหตุ: การเพิ่มเงื่อนไข table_type = 'BASE TABLE' เป็นการจำกัดผลลัพธ์ให้แสดงเฉพาะตารางจริงเท่านั้น ไม่รวมถึง View หรือ Materialized View ซึ่งช่วยให้การ Query มีความแม่นยำยิ่งขึ้น
บทสรุป: การจัดการ Metadata ใน PostgreSQL
การใช้ information_schema ใน PostgreSQL เป็นวิธีมาตรฐานและมีประสิทธิภาพที่สุดในการจัดการ Metadata ของฐานข้อมูล การทำความเข้าใจความแตกต่างระหว่างการ Query ตารางทั้งหมด (Database-wide), ตารางของตนเอง (Own Schema), และตารางใน Schema ที่กำหนด (Specific Schema) จะช่วยให้คุณสามารถเขียนสคริปต์หรือแอปพลิเคชันที่สามารถตรวจสอบโครงสร้างฐานข้อมูลได้อย่างสมบูรณ์และเป็นระบบ
การใช้ information_schema ไม่เพียงแต่ช่วยในการ List ตารางเท่านั้น แต่ยังสามารถใช้เพื่อดึงข้อมูลอื่นๆ เช่น คอลัมน์ (Columns), ประเภทข้อมูล (Data Types) และ Constraints ได้อีกด้วย ซึ่งเป็นพื้นฐานสำคัญในการพัฒนาแอปพลิเคชันระดับ Senior Architect ครับ