ฉันกำลังพยายามทดสอบjson
ประเภทใน PostgreSQL 9.3
ฉันมีjson
คอลัมน์ที่เรียกว่าในตารางที่เรียกว่าdata
reports
JSON มีลักษณะดังนี้:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
ฉันต้องการสอบถามตารางสำหรับรายงานทั้งหมดที่ตรงกับค่า "src" ในอาร์เรย์ "วัตถุ" ยกตัวอย่างเช่นมันเป็นไปได้ที่จะสอบถาม DB สำหรับรายงานทั้งหมดที่จับคู่'src' = 'foo.png'
? ฉันเขียนข้อความค้นหาที่ตรงกับ"background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
แต่เนื่องจาก"objects"
มีอาร์เรย์ของค่าดูเหมือนว่าฉันจะเขียนสิ่งที่ใช้งานไม่ได้ มันเป็นไปได้ที่จะสอบถาม DB สำหรับรายงานทั้งหมดที่จับคู่'src' = 'foo.png'
? ฉันได้ตรวจสอบแหล่งที่มาเหล่านี้แล้ว แต่ยังไม่สามารถรับได้:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- ฉันจะสอบถามโดยใช้ช่องภายในประเภทข้อมูล PostgreSQL JSON ใหม่ได้อย่างไร
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
ฉันได้ลองทำสิ่งนี้เช่นกัน แต่ไม่มีประโยชน์:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
ฉันไม่ใช่ผู้เชี่ยวชาญด้าน SQL ดังนั้นฉันจึงไม่รู้ว่าฉันทำอะไรผิด
jsonb
/ pg 9.4 นอกจากนี้: สำหรับกรณีง่ายๆ (1 ระดับของการซ้อน) ตัว->
ดำเนินการยังทำเคล็ดลับสำหรับjson
ในหน้า 9.3