DEV Community

Cover image for ข้อมูล JSON ใน PostgreSQL: โลกใหม่ของการจัดการข้อมูลบน Postgres
iconnext for ใดๆในโลกล้วน Postgres

Posted on • Edited on

ข้อมูล JSON ใน PostgreSQL: โลกใหม่ของการจัดการข้อมูลบน Postgres

เกรินนำ

PostgreSQL ไม่เพียงแค่เป็นฐานข้อมูลที่มีความสามารถสูง แต่ยังมีฟีเจอร์สำหรับการจัดการข้อมูล JSON ที่ทรงพลังอีกด้วย วันนี้เราจะพาคุณสำรวจโลกของ JSON ใน PostgreSQL ที่จะทำให้การจัดการข้อมูลของคุณเป็นเรื่องง่ายและสนุกขึ้น!

ว่าแต่ JSON คืออะไร?
JSON (JavaScript Object Notation) เป็นรูปแบบข้อมูลที่ใช้สำหรับการแลกเปลี่ยนข้อมูลระหว่างระบบ มีโครงสร้างที่เข้าใจง่ายทั้งสำหรับมนุษย์และเครื่องคอมพิวเตอร์ ซึ่งมักถูกใช้อย่างแพร่หลายในเว็บแอปพลิเคชันและบริการ API ต่าง ๆ

รูปแบบของ JSON

วัตถุ (Object)
วัตถุใน JSON ประกอบด้วยคู่ชื่อ-ค่า (name-value pairs) โดยใช้เครื่องหมาย {} และเครื่องหมายจุลภาค , เพื่อคั่นคู่ชื่อ-ค่าแต่ละคู่:

{
    "name": "Alice",
    "age": 25,
    "city": "Wonderland"
}
Enter fullscreen mode Exit fullscreen mode

อาร์เรย์ (Array)

อาร์เรย์ใน JSON ประกอบด้วยรายการของค่าโดยใช้เครื่องหมาย [] และเครื่องหมายจุลภาค , เพื่อคั่นค่าต่าง ๆ:

[
    "Apple",
    "Banana",
    "Cherry"
]
Enter fullscreen mode Exit fullscreen mode

ประเภทของค่าใน JSON

  • สตริง (String): ข้อความที่อยู่ในเครื่องหมายอัญประกาศคู่ ""
"example": "Hello, World!"
Enter fullscreen mode Exit fullscreen mode
  • ตัวเลข (Number): ค่าตัวเลข
"example": 123
Enter fullscreen mode Exit fullscreen mode
  • วัตถุ (Object): ชุดของคู่ชื่อ-ค่า
"example": {"key": "value"}
Enter fullscreen mode Exit fullscreen mode
  • อาร์เรย์ (Array): รายการของค่า
"example": ["item1", "item2"]
Enter fullscreen mode Exit fullscreen mode
  • บูลีน (Boolean): ค่าความจริง true หรือ false
"example": true
Enter fullscreen mode Exit fullscreen mode
  • ค่าว่าง (Null): ค่าว่าง null
"example": null
Enter fullscreen mode Exit fullscreen mode

ตัวอย่างที่ซับซ้อนขึ้น
แสดง 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
}
Enter fullscreen mode Exit fullscreen mode

มาเริ่มจัดการข้อมูล JSON กัน

สรา้งตารางที่มี column เป็น JSON
เริ่มต้นสร้างตารางขึ้นมาก่อน

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    data JSONB
);
Enter fullscreen mode Exit fullscreen mode

สร้างตาราง users ที่มีคอลัมน์ data เป็น JSONB

การแทรกข้อมูล JSON
การแทรกข้อมูล JSON ก็ง่ายไม่แพ้กัน ลองดูตัวอย่างนี้:

INSERT INTO users (data) VALUES ('{"name": "Alice", "age": 30, "city": "Wonderland"}');
Enter fullscreen mode Exit fullscreen mode

ง่ายเหมือนการใส่ข้อมูลลงในฐานข้อมูลแบบธรรมดา!

การค้นหาข้อมูล JSON
การค้นหาข้อมูล JSON ใน PostgreSQL นั้นเหมือนการค้นหาในโลกแห่งมายา คุณสามารถใช้คำสั่งนี้:

Copy code
SELECT data->>'name' AS name FROM users WHERE data->>'city' = 'Wonderland';
Enter fullscreen mode Exit fullscreen mode

คำสั่งนี้จะค้นหาผู้ใช้ที่อาศัยอยู่ในเมือง Wonderland และแสดงชื่อของพวกเขา

การอัปเดตข้อมูล JSON
การอัปเดตข้อมูล JSON ก็ทำได้ง่ายและรวดเร็ว ลองดูตัวอย่างนี้:

UPDATE users SET data = jsonb_set(data, '{age}', '31') WHERE data->>'name' = 'Alice';
Enter fullscreen mode Exit fullscreen mode

เพียงเท่านี้ อายุของ Alice ก็จะถูกอัปเดตเป็น 31 ปี!

การลบข้อมูล JSON
การลบข้อมูล JSON ทำได้โดยการระบุคีย์ที่ต้องการลบ:

Copy code
UPDATE users SET data = data - 'city' WHERE data->>'name' = 'Alice';
Enter fullscreen mode Exit fullscreen mode

คำสั่งนี้จะลบข้อมูลเมืองของ Alice ออกไป

ฟังก์ชั่น และตัวดำเนินการเกี่ยวกับข้อมูล JSON
จากการหัวข้อที่ผ่านมาจะพบว่า syntax หลายส่วนจะไม่ตรงตามรูปแบบภาษา SQL นักเนื่องจากประเภทข้อมูล JSON ไม่ใช่ชนิดข้อมูลมาตรฐานของ SQL แต่ Postgres ก็มีเครื่องมือที่ทรงพลังในการจัดการข้อมูลอยู่
***ตัวดำเนินการในการดึงข้อมูล

  1. -> (Extract JSON Object Field): ดึงค่า JSON object field โดยไม่แปลงเป็นประเภทอื่น
  2. ->> (Extract JSON Object Field as Text): ดึงค่า JSON object field และแปลงเป็นข้อความ
  3. #> (Extract JSON Sub-Object): ดึงค่า JSON sub-object
  4. #>> (Extract JSON Sub-Object as Text): ดึงค่า JSON sub-object และแปลงเป็นข้อความ ฟังก์ชันสำหรับการอัปเดตข้อมูล JSON
  5. jsonb_set: อัปเดตค่าใน JSONB
  6. jsonb_insert: แทรกค่าใหม่ใน JSONB
  7. jsonb_delete: ลบคีย์ออกจาก JSONB ฟังก์ชันสำหรับการสร้างและการตรวจสอบ JSON
  8. json_build_object: สร้าง JSON object จากคู่คีย์-ค่า
  9. jsonb_pretty: จัดรูปแบบ JSONB ให้สวยงาม
  10. 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)