Company insights

การเก็บข้อมูล JSON ใน PostgreSQL


PostgreSQL เป็นฐานข้อมูลที่รองรับการเก็บข้อมูลในรูปแบบ JSON
ทำให้สามารถเก็บข้อมูลที่มีโครงสร้างแบบยืดหยุ่นได้
เช่น ข้อมูล API, ข้อมูล configuration หรือข้อมูลที่มีโครงสร้างไม่แน่นอน


PostgreSQL มี Data Type สำหรับ JSON อยู่ 2 แบบ คือ


  • JSON

  • JSONB

ความแตกต่างระหว่าง JSON และ JSONB


JSON
- เก็บข้อมูลในรูปแบบ text
- เก็บข้อมูลตามรูปแบบเดิมที่ใส่เข้าไป
- Query ช้ากว่า

JSONB
- เก็บข้อมูลแบบ Binary
- สามารถ Index ได้
- Query ได้เร็วกว่า


โดยทั่วไปแนะนำให้ใช้ JSONB
เพราะมีประสิทธิภาพในการค้นหาที่ดีกว่า

ตัวอย่างการสร้างตารางเก็บ JSON


CREATE TABLE products (
   id SERIAL PRIMARY KEY,
   name VARCHAR(100),
   data JSONB
);


ในตัวอย่างนี้คอลัมน์ data จะใช้สำหรับเก็บข้อมูล JSON

ตัวอย่างการ Insert ข้อมูล JSON


INSERT INTO products (name, data)
VALUES (
   'Laptop',
   '{
       "brand": "Dell",
       "ram": "16GB",
       "storage": "512GB",
       "price": 35000
   }'
);

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


สามารถใช้ Operator ของ PostgreSQL เพื่อดึงข้อมูลจาก JSON ได้


SELECT data->>'brand'
FROM products;


ผลลัพธ์


Dell

การค้นหาข้อมูลใน JSON


SELECT *
FROM products
WHERE data->>'brand' = 'Dell';

การ Update ข้อมูล JSON


UPDATE products
SET data = jsonb_set(data, '{price}', '30000')
WHERE id = 1;

การสร้าง Index สำหรับ JSONB


ถ้าต้องค้นหาข้อมูล JSON บ่อย
สามารถสร้าง Index เพื่อเพิ่มความเร็วในการ Query ได้


CREATE INDEX idx_products_data
ON products
USING GIN (data);

สรุป


PostgreSQL รองรับการเก็บข้อมูล JSON ผ่าน Data Type
JSON และ JSONB ซึ่งช่วยให้สามารถเก็บข้อมูลที่มีโครงสร้างยืดหยุ่นได้
โดย JSONB จะมีประสิทธิภาพสูงกว่าและสามารถสร้าง Index ได้
จึงเหมาะกับการใช้งานในระบบจริง