เกรินนำ
PostgreSQL ไม่เพียงแค่เป็นฐานข้อมูลที่มีความสามารถสูง แต่ยังมีฟีเจอร์สำหรับการจัดการข้อมูล JSON ที่ทรงพลังอีกด้วย วันนี้เราจะพาคุณสำรวจโลกของ JSON ใน PostgreSQL ที่จะทำให้การจัดการข้อมูลของคุณเป็นเรื่องง่ายและสนุกขึ้น!
ว่าแต่ JSON คืออะไร?
JSON (JavaScript Object Notation) เป็นรูปแบบข้อมูลที่ใช้สำหรับการแลกเปลี่ยนข้อมูลระหว่างระบบ มีโครงสร้างที่เข้าใจง่ายทั้งสำหรับมนุษย์และเครื่องคอมพิวเตอร์ ซึ่งมักถูกใช้อย่างแพร่หลายในเว็บแอปพลิเคชันและบริการ API ต่าง ๆ
รูปแบบของ JSON
วัตถุ (Object)
วัตถุใน JSON ประกอบด้วยคู่ชื่อ-ค่า (name-value pairs) โดยใช้เครื่องหมาย {} และเครื่องหมายจุลภาค , เพื่อคั่นคู่ชื่อ-ค่าแต่ละคู่:
{
"name": "Alice",
"age": 25,
"city": "Wonderland"
}
อาร์เรย์ (Array)
อาร์เรย์ใน JSON ประกอบด้วยรายการของค่าโดยใช้เครื่องหมาย [] และเครื่องหมายจุลภาค , เพื่อคั่นค่าต่าง ๆ:
[
"Apple",
"Banana",
"Cherry"
]
ประเภทของค่าใน JSON
- สตริง (String): ข้อความที่อยู่ในเครื่องหมายอัญประกาศคู่ ""
"example": "Hello, World!"
- ตัวเลข (Number): ค่าตัวเลข
"example": 123
- วัตถุ (Object): ชุดของคู่ชื่อ-ค่า
"example": {"key": "value"}
- อาร์เรย์ (Array): รายการของค่า
"example": ["item1", "item2"]
- บูลีน (Boolean): ค่าความจริง true หรือ false
"example": true
- ค่าว่าง (Null): ค่าว่าง null
"example": null
ตัวอย่างที่ซับซ้อนขึ้น
แสดง Array ของ user Object ซึ่งObject user ประกอบด้วยชื่อ(name)และเมือง(city)เป็น String และอายุ(age) เป็น Number
{
"users": [
{
"name": "Alice",
"age": 25,
"city": "Wonderland"
},
{
"name": "Bob",
"age": 30,
"city": "Builderland"
}
],
"isActive": true,
"totalUsers": 2
}
มาเริ่มจัดการข้อมูล JSON กัน
สรา้งตารางที่มี column เป็น JSON
เริ่มต้นสร้างตารางขึ้นมาก่อน
CREATE TABLE users (
id SERIAL PRIMARY KEY,
data JSONB
);
สร้างตาราง users ที่มีคอลัมน์ data เป็น JSONB
การแทรกข้อมูล JSON
การแทรกข้อมูล JSON ก็ง่ายไม่แพ้กัน ลองดูตัวอย่างนี้:
INSERT INTO users (data) VALUES ('{"name": "Alice", "age": 30, "city": "Wonderland"}');
ง่ายเหมือนการใส่ข้อมูลลงในฐานข้อมูลแบบธรรมดา!
การค้นหาข้อมูล JSON
การค้นหาข้อมูล JSON ใน PostgreSQL นั้นเหมือนการค้นหาในโลกแห่งมายา คุณสามารถใช้คำสั่งนี้:
Copy code
SELECT data->>'name' AS name FROM users WHERE data->>'city' = 'Wonderland';
คำสั่งนี้จะค้นหาผู้ใช้ที่อาศัยอยู่ในเมือง Wonderland และแสดงชื่อของพวกเขา
การอัปเดตข้อมูล JSON
การอัปเดตข้อมูล JSON ก็ทำได้ง่ายและรวดเร็ว ลองดูตัวอย่างนี้:
UPDATE users SET data = jsonb_set(data, '{age}', '31') WHERE data->>'name' = 'Alice';
เพียงเท่านี้ อายุของ Alice ก็จะถูกอัปเดตเป็น 31 ปี!
การลบข้อมูล JSON
การลบข้อมูล JSON ทำได้โดยการระบุคีย์ที่ต้องการลบ:
Copy code
UPDATE users SET data = data - 'city' WHERE data->>'name' = 'Alice';
คำสั่งนี้จะลบข้อมูลเมืองของ Alice ออกไป
ฟังก์ชั่น และตัวดำเนินการเกี่ยวกับข้อมูล JSON
จากการหัวข้อที่ผ่านมาจะพบว่า syntax หลายส่วนจะไม่ตรงตามรูปแบบภาษา SQL นักเนื่องจากประเภทข้อมูล JSON ไม่ใช่ชนิดข้อมูลมาตรฐานของ SQL แต่ Postgres ก็มีเครื่องมือที่ทรงพลังในการจัดการข้อมูลอยู่
***ตัวดำเนินการในการดึงข้อมูล
- -> (Extract JSON Object Field): ดึงค่า JSON object field โดยไม่แปลงเป็นประเภทอื่น
- ->> (Extract JSON Object Field as Text): ดึงค่า JSON object field และแปลงเป็นข้อความ
- #> (Extract JSON Sub-Object): ดึงค่า JSON sub-object
- #>> (Extract JSON Sub-Object as Text): ดึงค่า JSON sub-object และแปลงเป็นข้อความ ฟังก์ชันสำหรับการอัปเดตข้อมูล JSON
- jsonb_set: อัปเดตค่าใน JSONB
- jsonb_insert: แทรกค่าใหม่ใน JSONB
- jsonb_delete: ลบคีย์ออกจาก JSONB ฟังก์ชันสำหรับการสร้างและการตรวจสอบ JSON
- json_build_object: สร้าง JSON object จากคู่คีย์-ค่า
- jsonb_pretty: จัดรูปแบบ JSONB ให้สวยงาม
- jsonb_typeof: ตรวจสอบประเภทของค่าใน JSONB
หมายเหตุ
สามารถดูรายละเอียดเพิ่มเติม
https://www.postgresql.org/docs/current/functions-json.html
ข้อควรรู้
- JSON กับ JSONB ไม่เหมือนกันนะ JSON กับจะเก็บข้อมูลในรูปแบบ text ในขณะที่ JSONB จะเก็บในรูปแบบ binary ทำให้รองรับการบีบอัดเพื่อประหยัดพื้นที่ และการเข้าข้อมูลแบบสุ่มทำให้เร็วกว่าจึงเหมาะสำหรับการเก็บข้อมูล JSON ที่ต้องการดัดแปลงบ่อย
- การทำ Index ในข้อมูลชนิด JSON แนะนำดัชนีเป็นประเภท B-Tree ซึ่งทำงานได้ดีกว่า
- ขนาดข้อมูลสูงสุดที่รับได้ ใน postgres กำหนดค่าเริ่มต้นขนาดเพจไว้ 8KB และกำหนดประเภทข้อมูล JSON ไว้ 1 เพจดังนั้นขนาดข้อมูลจึงไม่ควรเกิน 8 KB
ส่งท้าย
หวังว่าบนความนี้จะทำให้เข้าใจข้อมูลประเภท JSON และสนุกกับการจัดการข้อมูลประเภทนี้ผ่าน postgres มากขึ้นเพื่อนำมาใช้ในproject ต่างๆได้ครับแล้วพบกันใหม่ครับ
Top comments (0)