Real vazifalar: migratsiya, arxivlash, audit
terminal
Amaliy lablar
Ushbu darsga biriktirilgan interaktiv topshiriqlar — real Kubernetes muhitida bajaring va natijani tekshiring.
terminal
PostgreSQL: sekin hisobotni MATERIALIZED VIEW bilan tezlashtirish
Murakkabbolt+30 XP
Boshqaruv paneli har ochilganda 40 000 qatorni agregatlaydi. Ma'lumot real vaqtda kerak emas — daqiqada bir marta yangilanishi yetarli. 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. Vazifa hisobot nomli MATERIALIZED VIEW yarating: xizmat bo'yicha guruhlangan count( ) (soni) va max(vaqt) (oxirgi) xizmat ustuniga idx hisobot xizmat nomli UNIQUE indeks qo'shing — refresh concurrently uchun SHART refresh materialized view concurrently hisobot bajarib ishlashini tekshiring ⚠SEED matview yaratilgandan KEYIN yangi qator qo'shadi — refresh'dan keyin u ham hisobotga tushishi kerak. Muvaffaqiyat mezoni (jonli) Matview mavjud (relkind = m) va to'ldirilgan; UNIQUE indeks bor; refresh'dan keyin db xizmati ham hisobotda ko'rinadi; jami 3 xizmat
terminal
PostgreSQL: katta jadvalni partitsiyalash va partition pruning
Murakkabbolt+30 XP
Jurnal jadvali oyma-oy o'sib boryapti. Eski oylarni o'chirish delete bilan sekin va jadvalni shishtiradi; so'rovlar esa har doim butun jadvalni skanerlaydi. 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. Vazifa hodisa jadvalini vaqt bo'yicha DIAPAZON (range) bo'yicha partitsiyalangan qilib qayta qurib bering: hodisa yangi nomli partitsiyalangan jadval yarating (partition by range (vaqt)), ustunlar: id bigint, xizmat text not null, vaqt timestamptz not null Ikki partitsiya: hodisa 2026 01 (yanvar) va hodisa 2026 02 (fevral) Ma'lumotni hodisa dan hodisa yangi ga ko'chiring ⚠Tekshiruv rejani o'qib, YANVAR so'rovi FEVRAL partitsiyasiga TEGMASLIGINI talab qiladi (partition pruning). Muvaffaqiyat mezoni (jonli) Partitsiyalangan jadval mavjud (relkind = p) va ikki partitsiyasi bor; ma'lumot to'liq ko'chgan (40 000 qator, 20 000 + 20 000); yanvar so'rovi rejasida FAQAT yanvar partitsiyasi ko'rinadi
terminal
PostgreSQL: eski ma'lumotni arxiv jadvaliga ko'chirish (CTE bilan atomar)
Murakkabbolt+30 XP
Asosiy jadval 40 000 qatorga yetdi, ammo so'rovlar faqat oxirgi oyga tegishli. Eski ma'lumotni ARXIV jadvaliga ko'chirish kerak — bir amalda, yo'qotishsiz. 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. Vazifa hodisa arxiv jadvalini hodisa bilan bir xil tuzilmada yarating (create table ... (like hodisa including all)) vaqt < '2026-02-01' bo'lgan qatorlarni hodisa dan hodisa arxiv ga KO'CHIRING — bitta atomar buyruqda: ⚠Ma'lumot YO'QOLMASLIGI kerak: ikki jadval yig'indisi 40 000 bo'lsin. Muvaffaqiyat mezoni (jonli) Arxivda 20 000 qator, asosiy jadvalda 20 000 qator, jami 40 000 (yo'qotish yo'q); asosiy jadvalda 2026-02-01 dan oldingi qator QOLMAGAN; arxivda faqat eski qatorlar
terminal
PostgreSQL: soft delete — qisman indeks va VIEW bilan
Murakkabbolt+30 XP
Ma'lumotni jismonan o'chirish audit izini yo'qotadi va tasodifiy yo'qotishga olib keladi. Amaliyotdagi yechim — "soft delete": qatorni o'chirilgan deb BELGILASH. 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. Vazifa hodisa jadvaliga ochirilgan vaqt timestamptz ustunini qo'shing (sukut bo'yicha NULL — ya'ni faol) FAQAT faol qatorlar uchun idx hodisa faol nomli QISMAN indeks yarating (vaqt bo'yicha, where ochirilgan vaqt is null) hodisa faol nomli VIEW yarating — faqat faol qatorlarni ko'rsatsin id <= 100 bo'lgan qatorlarni o'chirilgan deb belgilang ⚠Faol qatorlar so'rovi AYNAN qisman indeksdan foydalanishi kerak. Muvaffaqiyat mezoni (jonli) Ustun, qisman indeks va view mavjud; 100 qator o'chirilgan deb belgilangan; view faqat 29 900 faol qatorni ko'rsatadi; faol qatorlar so'rovi aynan idx hodisa faol dan foydalanadi
terminal
PostgreSQL: dublikatlarni tozalab UNIQUE constraint qo'shish
Murakkabbolt+30 XP
Xat ro'yxatiga UNIQUE constraint qo'yilmagan va vaqt o'tib bir xil email bir necha marta yozilgan. Endi constraint qo'shish kerak — lekin dublikatlar bo'lgani uchun u yaratilmaydi. 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. Vazifa xat jadvalida 6 qator bor, ulardan faqat 3 tasi unikal email. Har email uchun ENG KICHIK id li qatorni SAQLAB, qolganlarini o'chiring (row number() bilan) email ustuniga idx xat email nomli UNIQUE indeks qo'shing ⚠Tartibni buzmang: avval tozalash, keyin indeks. Teskarisi ishlamaydi. Muvaffaqiyat mezoni (jonli) Jadvalda 3 qator qoladi va aynan id = 1, 3, 4 saqlanadi; UNIQUE indeks mavjud; takroriy email endi RAD etiladi
terminal
PostgreSQL: orfan qatorlar va FK ni NOT VALID bilan qo'shish
Murakkabbolt+30 XP
buyurtma jadvalida FK yo'q va vaqt o'tib mavjud bo'lmagan mijozga ishora qiladigan qatorlar (orfan) paydo bo'lgan. FK qo'shishga urinish xato beradi. 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. Vazifa mijoz jadvalida MAVJUD BO'LMAGAN mijoz id li qatorlarni buyurtma dan o'chiring fk buyurtma mijoz nomli FK constraint qo'shing (mijoz id - mijoz.id) Constraint TEKSHIRILGAN (validated) holatda bo'lsin ⚠Katta jadvalda ishlatiladigan naqsh: avval not valid bilan qo'shib (tez, bloklamaydi), keyin validate constraint (sekin, lekin yengil qulf bilan). Bu labda ikkovi ham qabul qilinadi. Muvaffaqiyat mezoni (jonli) Orfan qator qolmagan (2 qator qoladi); FK constraint mavjud va convalidated = true; mavjud bo'lmagan mijozga insert RAD etiladi
terminal
PostgreSQL: audit izini trigger orqali yozib borish
Murakkabbolt+30 XP
Regulyator talabi: mijoz jadvalidagi har o'zgarish qayd etilishi kerak — kim, qachon, nimani o'zgartirgani. Ilova kodiga tayanish ishonchsiz: bitta yo'l unutilsa audit izi buziladi. 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. Vazifa audit izi jadvalini yarating: id (PK), jadval text, amal text, eski jsonb, yangi jsonb, vaqt timestamptz default now() audit yoz() nomli trigger funksiyasi yozing — TG TABLE NAME, TG OP, to jsonb(OLD), to jsonb(NEW) qiymatlarini yozsin tr mijoz audit nomli triggerni mijoz jadvaliga ulang — after update, for each row ⚠Checker mijoz ni yangilab, audit qatori paydo bo'lishini va ichida ESKI hamda YANGI qiymat borligini tekshiradi. Muvaffaqiyat mezoni (jonli) Trigger va funksiya katalogda mavjud; update bajarilgach audit qatori yoziladi; eski- 'ism' = Ali, yangi- 'ism' = Ali Valiyev; amal = UPDATE
terminal
PostgreSQL: ishlab turgan jadvalga NOT NULL ustun qo'shish
Murakkabbolt+30 XP
Million qatorli jadvalga NOT NULL ustun qo'shish kerak. Noto'g'ri yozilgan alter table butun jadvalni qayta yozadi va daqiqalar davomida bloklaydi — ishlab chiqarishda bu uzilish. 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. Vazifa hodisa jadvaliga holat ustunini qo'shing: turi text NOT NULL sukut qiymati 'yangi' ⚠Ustun sukut qiymati bilan BIR buyruqda qo'shilsin — PostgreSQL 11+ da bu jadvalni QAYTA YOZMAYDI (metama'lumotga yoziladi, "fast default"). ⚠Mavjud barcha qatorlarda holat = yangi bo'lishi kerak. Muvaffaqiyat mezoni (jonli) Ustun mavjud, turi text, NOT NULL va sukut qiymati 'yangi'; MAVJUD barcha qatorlarda qiymat yangi; sukut qiymatsiz insert ishlaydi; NULL yozishga urinish RAD etiladi
terminal
PostgreSQL: ustun turini text dan integer ga o'girish
Murakkabbolt+30 XP
Merosxo'r sxemada narx ustuni text turida saqlangan — solishtirish alifbo bo'yicha ishlaydi ('9' '100') va arifmetika qilib bo'lmaydi. Turini to'g'rilash 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. Vazifa mahsulot jadvalining narx ustunini text dan integer ga o'zgartiring. ⚠using bilan aniq o'girish kerak: alter table ... alter column narx type integer using narx::integer ⚠Barcha qiymatlar saqlanishi kerak (yig'indi o'zgarmasin). Muvaffaqiyat mezoni (jonli) Ustun turi integer (pg typeof ham shuni ko'rsatadi); qatorlar soni va narx YIG'INDISI o'zgarmagan; endi SON bo'yicha solishtirish to'g'ri ishlaydi (narx 90 aynan 3 qator: 100, 99, 93); arifmetika ishlaydi
terminal
PostgreSQL: chiqarish oldidan baza auditi (bank yakuni)
Murakkabbolt+30 XP
Yangi xizmat ishlab chiqarishga chiqmoqda. Baza tomonidan TO'RT narsa tekshirilishi kerak: butunlik, tezlik, himoya va zaxira. Bu — real reliz oldidan bajariladigan ish. 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. Vazifa To'rt qadamni bajaring: 1. BUTUNLIK — buyurtma.mijoz id uchun fk buyurtma mijoz nomli FK qo'shing (orfan qatorlarni avval tozalang) va TEKSHIRILGAN holatga keltiring. 2. TEZLIK — panel so'rovi uchun idx buyurtma panel nomli indeks yarating: select from buyurtma where mijoz id = ? order by yaratilgan desc limit 10 — rejada Sort QOLMASIN. 3. HIMOYA — hn bazasi uchun statement timeout ni 5s qilib belgilang. 4. ZAXIRA — /root/db/zaxira.dump fayliga custom format zaxira oling va uni tekshiruv nomli YANGI bazaga tiklab, qatorlar sonini tasdiqlang. Muvaffaqiyat mezoni (jonli) FK mavjud va validated, orfan qolmagan; indeks mavjud va panel so'rovi undan foydalanadi, rejada Sort YO'Q; statement timeout baza darajasida va uzun so'rov RAD etiladi; zaxira fayli mavjud va tekshiruv bazasida qatorlar soni to'g'ri
