JSONB: yarim-strukturali ma'lumot
lockThis content isn't available in English yetAvailable in: O'zbek
terminal
Hands-on labs
Interactive tasks attached to this lesson — complete them in a real Kubernetes environment and check the result.
terminal
PostgreSQL: ichma-ich JSONB yo'llari (#>> va tur o'girish)
Osonbolt+20 XP
Kerakli qiymat ichki obyektda: kontekst.ip. Har qadam uchun alohida strelka yozish o'rniga YO'L (path) sintaksisi bor. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. hodisa jadvalida 5001 qator: malumot ustuni jsonb turida. Har yozuv shakli: Bitta maxsus qator bor: xizmat = audit, daraja = fatal, user id = 999. Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi. Vazifa So'rov yozing: kontekst.urinish qiymati 3 dan katta yoki teng bo'lgan qatorlarni tanlab, kontekst.ip bo'yicha guruhlab qatorlar sonini chiqarsin. Ustunlar: ip, keyin son. ip o'sish tartibida, birinchi 5 qator. ⚠urinish — JSON da son, lekin matn qaytaradi: ::int ga o'girish SHART (aks holda matn solishtirish bo'ladi). Muvaffaqiyat mezoni (jonli) Natija AYNAN quyidagicha (qatorlar ;, ustunlar |): 10.0.0.11|250;10.0.0.15|250;10.0.0.19|250;10.0.0.3|250;10.0.0.7|250
terminal
PostgreSQL: JSONB massivini qatorlarga yoyish (jsonb_array_elements_text)
Osonbolt+20 XP
teglar — JSON massivi. "Qaysi teg necha marta uchraydi" degan savolga javob berish uchun massivni QATORLARGA yoyish kerak. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. hodisa jadvalida 5001 qator: malumot ustuni jsonb turida. Har yozuv shakli: Bitta maxsus qator bor: xizmat = audit, daraja = fatal, user id = 999. Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi. Vazifa So'rov yozing: barcha yozuvlarning teglar massivini yoyib, har teg necha marta uchraganini chiqarsin. Ustunlar: teg, keyin son. Natija son KAMAYISHI, keyin teg o'sishi bo'yicha. Maslahat: from hodisa, jsonb array elements text(malumot- 'teglar') as teg. Muvaffaqiyat mezoni (jonli) Natija AYNAN quyidagicha (qatorlar ;, ustunlar |): db|3333;cache|1667;timeout|1667;audit|1;kritik|1
terminal
PostgreSQL: JSONB ni o'zgartirish (jsonb_set, kalit o'chirish)
Osonbolt+20 XP
JSONB — o'zgarmas (immutable) qiymat: uni "joyida" tahrirlash mumkin emas, YANGI jsonb qurib qaytariladi. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. hodisa jadvalida 5001 qator: malumot ustuni jsonb turida. Har yozuv shakli: Bitta maxsus qator bor: xizmat = audit, daraja = fatal, user id = 999. Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi. Vazifa So'rov yozing: xizmat = audit bo'lgan yozuv uchun: daraja maydonini "kritik" ga o'zgartirsin kontekst kalitini BUTUNLAY olib tashlasin Natija bitta ustun (yangi) va bitta qator bo'lsin. Maslahat: jsonb set(malumot, '{daraja}', '"kritik"') va - 'kontekst'. Muvaffaqiyat mezoni (jonli) Natija AYNAN quyidagicha (qatorlar ;, ustunlar |): {"daraja": "kritik", "teglar": ["kritik", "audit"], "xizmat": "audit", "user id": 999}
terminal
PostgreSQL: qatorlardan JSON qurish (jsonb_build_object, jsonb_agg)
Murakkabbolt+30 XP
API javobini bazaning O'ZIDA JSON ko'rinishida qurish — ilova tomonida aylantirishdan tezroq va kamroq kod. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. hodisa jadvalida 5001 qator: malumot ustuni jsonb turida. Har yozuv shakli: Bitta maxsus qator bor: xizmat = audit, daraja = fatal, user id = 999. Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi. Vazifa So'rov yozing: har xizmat uchun {"xizmat": ..., "soni": ...} obyektini qurib, ularni BITTA JSON massiviga yig'sin. Massiv xizmat bo'yicha tartiblangan bo'lsin. Natija bitta ustun (natija), bitta qator. Maslahat: jsonb agg(jsonb build object(...) order by ...). Muvaffaqiyat mezoni (jonli) Natija AYNAN quyidagicha (qatorlar ;, ustunlar |): [{"soni": 1666, "xizmat": "api"}, {"soni": 1, "xizmat": "audit"}, {"soni": 1667, "xizmat": "db"}, {"soni": 1667, "xizmat": "web"}]
terminal
PostgreSQL: JSONB turlarini tekshirish (jsonb_typeof)
Osonbolt+20 XP
Aralash shakldagi JSONB bilan ishlashda "bu maydon son emasmi" degan savol doim turadi — tur bilmasdan o'girish so'rovni yiqitadi. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. hodisa jadvalida 5001 qator: malumot ustuni jsonb turida. Har yozuv shakli: Bitta maxsus qator bor: xizmat = audit, daraja = fatal, user id = 999. Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi. Vazifa So'rov yozing: xizmat = audit yozuvi uchun to'rt ustun chiqarsin — user id, teglar, kontekst va MAVJUD BO'LMAGAN yoq maydonining JSON TURLARI (t1, t2, t3, t4 nomlari bilan). Maslahat: jsonb typeof(malumot- 'user id') va h.k. Muvaffaqiyat mezoni (jonli) Natija AYNAN quyidagicha (qatorlar ;, ustunlar |): number|array|object|
terminal
PostgreSQL: JSONB dan relatsion hisobot (F temasi yakuni)
Murakkabbolt+30 XP
Boshqaruv paneliga hisobot kerak: daraja bo'yicha hodisalar soni va o'rtacha urinishlar. Ma'lumot JSONB da, hisobot esa oddiy jadval ko'rinishida bo'lishi kerak. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. hodisa jadvalida 5001 qator: malumot ustuni jsonb turida. Har yozuv shakli: Bitta maxsus qator bor: xizmat = audit, daraja = fatal, user id = 999. Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi. Vazifa So'rov yozing: daraja bo'yicha guruhlab uch ustun chiqarsin — daraja (matn), soni (qatorlar soni), ort urinish — kontekst.urinish ning o'rtachasi, IKKI xonali kasrgacha yaxlitlangan. Natija soni KAMAYISHI, keyin daraja o'sishi bo'yicha. ⚠urinish matn sifatida keladi — ::int ga o'girish SHART. Muvaffaqiyat mezoni (jonli) Natija AYNAN quyidagicha (qatorlar ;, ustunlar |): warn|1668|1.50;info|1667|1.50;error|1665|1.50;fatal|1|9.00
terminal
PostgreSQL: JSONB maydonini o'qish — strelka operatorlari farqi
Osonbolt+15 XP
JSONB ustunidan qiymat olishning IKKI operatori bor va ular turli TUR qaytaradi — bu farqni bilmaslik eng ko'p uchraydigan JSONB xatosi. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. hodisa jadvalida 5001 qator: malumot ustuni jsonb turida. Har yozuv shakli: Bitta maxsus qator bor: xizmat = audit, daraja = fatal, user id = 999. Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi. Vazifa So'rov yozing: xizmat maydoni bo'yicha guruhlab, har xizmat uchun qatorlar sonini chiqarsin. Ustunlar: xizmat, keyin son. Natija xizmat o'sish tartibida. ⚠- ishlatish kerak (matn qaytaradi), - emas (jsonb qaytaradi). Muvaffaqiyat mezoni (jonli) Natija AYNAN quyidagicha (qatorlar ;, ustunlar |): api|1666;audit|1;db|1667;web|1667
terminal
PostgreSQL: JSONB uchun GIN indeks va qamrash bo'yicha qidiruv
Murakkabbolt+30 XP
5001 qatorli jadvalda xizmat = audit yozuvini qidirish butun jadvalni skanerlayapti. JSONB uchun B-tree yaramaydi — GIN kerak. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. hodisa jadvalida 5001 qator: malumot ustuni jsonb turida. Har yozuv shakli: Bitta maxsus qator bor: xizmat = audit, daraja = fatal, user id = 999. Vazifa malumot ustuniga idx hodisa gin nomli GIN indeks yarating analyze hodisa; ⚠Indeks @ (qamrash) va ? (kalit mavjudligi) operatorlariga ishlaydi. Tekshiruv rejani o'qib, AYNAN shu indeks ishlatilganini talab qiladi. Muvaffaqiyat mezoni (jonli) GIN indeks katalogda mavjud; @ '{"xizmat": "audit"}' so'rovi aynan idx hodisa gin dan foydalanadi; ? operatori ham shu indeksdan foydalanadi
terminal
PostgreSQL: JSONB maydoni uchun ifoda indeksi — GIN yetmaganda
Murakkabbolt+30 XP
GIN indeks bor, lekin ilova malumot- 'user id' = '999' deb qidiryapti va reja hamon Seq Scan. Sabab — GIN bu operatorga yaramaydi. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. hodisa jadvalida 5001 qator: malumot ustuni jsonb turida. Har yozuv shakli: Bitta maxsus qator bor: xizmat = audit, daraja = fatal, user id = 999. Vazifa (malumot- 'user id') IFODASI bo'yicha idx hodisa uid nomli B-tree indeks yarating va analyze hodisa; bajaring. ⚠Qavslarga e'tibor: create index ... on hodisa ((malumot- 'user id')) — ifoda indeksi IKKI qavs talab qiladi. Muvaffaqiyat mezoni (jonli) Indeks katalogda (malumot - 'user id') ifodasi bilan mavjud; - bo'yicha qidiruv aynan idx hodisa uid dan foydalanadi; @ so'rovi esa (GIN yo'q bo'lsa) baribir Seq Scan
terminal
PostgreSQL: JSONB shaklini CHECK constraint bilan majburlash
Murakkabbolt+30 XP
JSONB moslashuvchan, lekin cheklovsiz JSONB — vaqt o'tib har xil shakldagi yozuvlar "aralash go'sht" ga aylanadi. Shaklni BAZA darajasida majburlash kerak. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. hodisa jadvalida 5001 qator: malumot ustuni jsonb turida. Har yozuv shakli: Bitta maxsus qator bor: xizmat = audit, daraja = fatal, user id = 999. Vazifa sozlama jadvalini yarating: id (PK), qiymat jsonb NOT NULL va sozlama shakl nomli CHECK constraint. Constraint quyidagilarni MAJBUR qilsin: nom kaliti MAVJUD va turi string port kaliti MAVJUD va turi number ⚠⚠MUHIM TUZOQ: jsonb typeof(qiymat- 'nom') = 'string' YOLG'IZ YETMAYDI — kalit yo'q bo'lsa ifoda NULL bo'ladi va CHECK constraint NULL ni "buzilmagan" deb hisoblaydi. Kalit MAVJUDLIGINI ? operatori bilan alohida tekshirish kerak. Muvaffaqiyat mezoni (jonli) To'g'ri yozuv qabul qilinadi; port matn bo'lsa RAD etiladi; nom kaliti YO'Q bo'lsa RAD etiladi; ortiqcha kalit qo'shilishi ruxsat
