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 ต่างๆได้ครับแล้วพบกันใหม่ครับ

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