025. ENUM, UUID, range va composite turlar
Bu mavzuda PostgreSQL'ga xos ma'lumot turlari bo'yicha 21 ta masala bor. Har bir masala oldida qavs ichida sxema nomi va qiyinlik darajasi ko'rsatilgan. Sxemalar Sxemalar va tayyorlov sahifasida berilgan.
Masalani o'zingiz yechib, natijani Kutilgan natija bilan solishtiring. O'zgartiruvchi masalalarda (INSERT, UPDATE, DELETE, DDL) natija shartda aytilgan tekshiruv so'rovidan olingan. Natija 10 qatordan ko'p bo'lsa, birinchi 10 qator ko'rsatilgan.
1. (dokon, oson) ENUM turi yarating: holat_turi ('yangi','tayyor','yopiq'); qiymatlarini enum_range bilan chiqaring.
2. (dokon, oson) ENUM ustunli jadval: 'ish' (id, holat holat_turi); ikki qator qo'shing va 'tayyor' sonini toping.
3. (dokon, oson) gen_random_uuid() ning uzunligini (matn) chiqaring.
4. (dokon, oson) Deterministik UUID: '550e8400-e29b-41d4-a716-446655440000'::uuid ni matnga qaytaring.
5. (dokon, o'rta) ENUM tartibi: ('yangi' < 'yopiq') solishtiring.
6. (dokon, o'rta) daterange: [2024-01-01, 2024-02-01) oralig'ida 2024-01-15 borligini @> bilan tekshiring.
7. (dokon, o'rta) Ikki oraliq kesishishi: int4range(1,10) && int4range(5,15).
8. (dokon, o'rta) numrange chegaralari: numrange(1.5,4.5) ning lower va upper qiymatlari.
9. (dokon, o'rta) Composite tur: 'manzil' (kocha text, uy int); qiymatdan uy raqamini (x).uy bilan chiqaring.
10. (dokon, qiyin) Narx diapazoni: 'narx_oraliq' jadvali (id, oraliq int4range), EXCLUDE emas; 100 ni o'z ichiga olganlar soni.
11. (dokon, qiyin) EXCLUDE USING gist: bir xonani bir vaqtga ikki marta band qilish mumkin emas; btree_gist kerak: 'band' jadvali (xona int, vaqt tsrange, EXCLUDE USING gist (xona WITH =, vaqt WITH &&)); jadvaldagi cheklov turi 'x'.
12. (maktab, oson) ENUM: 'jins_turi' ('erkak','ayol') va qiymatlar soni (enum_range massiv uzunligi).
13. (maktab, o'rta) Dars vaqti oralig'i: tsrange('2025-01-01 09:00','2025-01-01 10:30') davomiyligi (soat).
14. (maktab, qiyin) Ball oraliqlari bo'yicha baho toifalari: int4range [1,3) 'past', [3,5) 'o''rta', [5,6) 'yuqori'; baholarni mos toifaga joylab sonini chiqaring.
15. (bank, oson) Tranzaksiya turi uchun ENUM: 'trn_turi' ('kirim','chiqim','otkazma') va qiymatlar soni.
16. (bank, o'rta) UUID kalit: 'hujjat' jadvali (id uuid DEFAULT gen_random_uuid() PRIMARY KEY, nom text); 2 qator qo'shib id uzunligi 36 ekanini tekshiring.
17. (bank, o'rta) Qarz muddati oraliqlari: int4range(6,19) ichiga tushadigan (6<=muddat_oy<19) qarzlar sonini chiqaring.
18. (bank, qiyin) Mijoz ma'lumotlari composite tur: 'shaxs' (ism text, yosh int); ROW dan ism ni ajrating va ro'yxatda 'Ali' ni tekshiring.
19. (kutubxona, oson) Kitob holati ENUM: 'kitob_holat' ('mavjud','ijarada','yoqolgan') — tartiblash: ENUM tartibi bo'yicha eng kattasi (max).
20. (kutubxona, o'rta) Ijara davri daterange: har bir qaytarilgan ijara uchun daterange(olingan, qaytarilgan) va 2024-02-01 ni o'z ichiga olgan ijaralar soni.
21. (kutubxona, qiyin) Ijara oraliqlari kesishuvi: bir kitobning ikki xil ijarasi vaqt bo'yicha kesishgan juftliklar soni (a.id