DEV Community

ข้อมูล XML บน Postgres : มารู้จักรุ่นพี่ของวงการแลกเปลี่ยนข้อมูลระหว่าง service กัน

บทนำ

ครั้งก่อนเราเคยทำบทความ "ข้อมูล JSON ใน PostgreSQL: โลกใหม่ของการจัดการข้อมูลบน Postgres" ซึ่งเกี่ยวกับการจัดการข้อมูล JSON ไปแล้ววันนี้เราจะมาคุยเรื่องการจัดการข้อมูลแบบ xml กัน
ในยุคสมัยที่มีการแลกเลี่ยนข้อมูลระหว่าง service ผ่าน API โดยส่งข้อมูลในรูปแบบ JSON เคยทราบไหมว่าสมัยก่อน(สมัยนี้บางระบบก็ยังมีอยู่) เคยมีรูปแบบการแลกเปลี่ยนข้อมูลระหว่าง server โดยโปรโตคอลที่เรียกว่า SOAP(Simple Object Access Protocol) ซึ่งเป็นการแลกเปลี่ยนข้อมูลในรูปแบบ XML

แล้ว XML คืออะไรล่ะ

XML(Extensible Markup Language)ก็คือภาษาที่ใช้กำหนดโครงสร้างของข้อมูลแบบข้อความคล้ายกับภาษา HTML ซึ่งก็คือภาษากำหนดโครงสรา้งที่แสดงหน้าเว็บยังไงล่ะโดยรูปแบบของ XML จะประกอบด้วย

  • โครงสร้างแบบต้นไม้: ข้อมูล XML จะถูกจัดเรียงเป็นโครงสร้างแบบต้นไม้ ประกอบด้วย element attribute และ content
  • Element: หน่วยพื้นฐานของ XML เปรียบเสมือนแท็กใน HTML แต่ละ element จะมีชื่อและอาจมี attribute เพิ่มเติม
  • Attribute: ข้อมูลเพิ่มเติมเกี่ยวกับ element เก็บไว้ในรูปคู่ key-value
  • Content: เนื้อหาที่อยู่ภายใน element อาจเป็นข้อความ element ย่อย หรือ entity references
  • Document: โครงสร้าง XML ทั้งหมด ประกอบด้วย element attribute และ content ตามตัวอย่าง
<?xml version="1.0" encoding="UTF-8"?>
<product>
  <name>สินค้า A</name>
  <price>100</price>
  <stock>50</stock>
  <categories>
    <category>หมวดหมู่ 1</category>
    <category>หมวดหมู่ 2</category>
  </categories>
</product>
Enter fullscreen mode Exit fullscreen mode

แล้ว Postgres จัดการข้อมูลชนิด XML อย่างไร
ตัว postgres ไม่มีประเภทข้อมูล xml โดย postgres จะดำเนินการผ่าน extension ที่ชื่อ xml2 ซึ่งช่วยให้สามารถจัดเก็บ ประมวลผล และดึงข้อมูล XML ในฐานข้อมูล PostgreSQL ได้อย่างมีประสิทธิภาพ โดยรองรับการจัดการประเภทข้อมูลคือ

  • xml: เก็บข้อมูล XML แบบดั้งเดิม(text)
  • xmlb: เก็บข้อมูล XML แบบ binary (เอะคุ้นๆ นะ ดังนั้นข้อดีของ xmlb น่าจะคล้ายกับประเภทข้อมูล json)

การสร้างคอลัมน์ประเภท XML

CREATE TABLE products (
  id serial PRIMARY KEY,
  name varchar(255) NOT NULL,
  details xml NOT NULL
);
Enter fullscreen mode Exit fullscreen mode

จะเป็นการสร้างตารางที่มีคอลัมน์ details มีข้อมูลชนิด xml ขึ้นมา

การเพิ่มข้อมูล XML

INSERT INTO products (name, details)
VALUES ('สินค้า A', '<product><name>สินค้า A</name><price>100</price><stock>50</stock></product>');
Use code with caution.
content_copy
Enter fullscreen mode Exit fullscreen mode

การดึงข้อมูล XML

SELECT id, name, details->'name' AS product_name FROM products;
Use code with caution.
content_copy
Enter fullscreen mode Exit fullscreen mode

การแก้ไขข้อมูล XML

UPDATE products
SET details = details || xml '<discount>10</discount>'
WHERE id = 1;
Use code with caution.
Enter fullscreen mode Exit fullscreen mode

ฟังก์ชันสำหรับการประมวลผลข้อมูล XML

PostgreSQL รองรับฟังก์ชัน XML มากมาย
สำหรับการประมวลผลข้อมูล XML ตัวอย่างฟังก์ชันที่ใช้ทั่วไป ได้แก่:

  • xml_parse: แปลงสตริง XML เป็นค่าประเภท XML
  • xml_serialize: แปลงค่าประเภท XML เป็นสตริง XML
  • xpath: ดึงข้อมูล XML โดยใช้ XPath

ส่งท้าย
ถามว่าเรายังจำเป็นต้องเก็บข้อมูล XML อยู่ไหมผมเคยพัฒนาระบบที่ต้องส่งข้อมูลไปยัง service ที่ใช้ SOAP โปรโตคอลในการเชื่อมต่อซึ่งต้องส่งและเก็บข้อมูลการทำ transaction ย้อนหลังได้ตอนนั้นใช้ Microsoft SQL Server ที่มีประเภทข้อมูลเป็น xml ติดมาด้วย อีกทั้งยังมีอีกหลาย service ที่ยังมีการใช้ SOAP หวังว่าบทความนี้จะเป็นประโยชน์บ้างนะครับ
xml_update: อัปเดตข้อมูล XML

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up