Bosh sahifa Wiki PostgreSQL

PostgreSQL

PostgreSQL — ochiq kodli relational database boshqaruv tizimi. U ma’lumotlarni jadval ko‘rinishida saqlash, SQL orqali boshqarish, murakkab querylar bajarish va katta hajmdagi ma’lumotlar bilan ishlash uchun ishlatiladi.

PostgreSQL web ilovalar, mobil ilovalar, CRM, ERP, analytics tizimlari, SaaS platformalar, moliyaviy tizimlar va backend loyihalarda keng qo‘llanadi.

Vazifasi

PostgreSQL ma’lumotlarni tartibli saqlash va ular bilan ishonchli ishlash uchun xizmat qiladi.

PostgreSQL quyidagi vazifalarda ishlatiladi:

  • foydalanuvchi ma’lumotlarini saqlash;
  • mahsulot, buyurtma va to‘lov yozuvlarini yuritish;
  • backend API uchun asosiy database bo‘lish;
  • transaction bilan ishlash;
  • murakkab SQL querylarni bajarish;
  • relationlar orqali jadvallarni bog‘lash;
  • indexlar yordamida qidiruvni tezlashtirish;
  • backup va replication jarayonlarini qo‘llash;
  • JSON ma’lumotlar bilan ishlash;
  • analytics va hisobotlar tayyorlash.

Masalan, internet do‘konda foydalanuvchilar, mahsulotlar, savatcha, buyurtmalar va to‘lovlar PostgreSQL bazasida saqlanishi mumkin.

PostgreSQL qanday ishlaydi?

PostgreSQL client-server modeli asosida ishlaydi. Backend ilova yoki database client PostgreSQL serverga ulanadi va SQL query yuboradi. PostgreSQL query’ni bajaradi va natijani qaytaradi.

Oddiy jarayon:

  • backend PostgreSQL serverga ulanadi;
  • SQL query yuboriladi;
  • PostgreSQL query’ni tahlil qiladi;
  • kerakli jadval va indexlar tekshiriladi;
  • ma’lumot o‘qiladi yoki o‘zgartiriladi;
  • natija backendga qaytariladi.

PostgreSQL odatda 5432-port orqali ishlaydi.

Database

PostgreSQL server ichida bir nechta database bo‘lishi mumkin. Har bir database o‘z jadvallari, funksiyalari, indexlari va sxemalariga ega bo‘ladi.

Masalan:

  • app_db — asosiy ilova bazasi;
  • test_dbtest muhiti bazasi;
  • analytics_db — hisobotlar uchun baza;
  • backup_db — nusxa yoki vaqtinchalik baza.

Bitta PostgreSQL server turli loyihalar uchun alohida database’larni yuritishi mumkin.

Schema

Schema — PostgreSQL ichida obyektlarni guruhlash uchun ishlatiladigan tuzilma. Jadval, view, function va boshqa obyektlar schema ichida joylashadi.

PostgreSQL’da odatiy schema:

  • public.

Schema quyidagi maqsadlarda ishlatiladi:

  • jadvallarni guruhlash;
  • turli modul ma’lumotlarini ajratish;
  • bir database ichida tartibli tuzilma yaratish;
  • permissionlarni boshqarish;
  • obyekt nomlari to‘qnashuvining oldini olish.

Masalan, auth.users va shop.products ko‘rinishida turli schema ichida jadvallar bo‘lishi mumkin.

Table

PostgreSQL’da ma’lumotlar jadval ko‘rinishida saqlanadi. Jadval ustunlar va qatorlardan iborat bo‘ladi.

Masalan, users jadvali quyidagi ustunlarga ega bo‘lishi mumkin:

  • id;
  • name;
  • email;
  • password;
  • created_at;
  • is_active.

Har bir foydalanuvchi shu jadvalda alohida qator sifatida saqlanadi.

Data type

PostgreSQL’da har bir ustun ma’lum ma’lumot turiga ega bo‘ladi. Data type ustunda qanday qiymat saqlanishini belgilaydi.

Keng ishlatiladigan PostgreSQL data typelari:

  • INTEGER — butun son;
  • BIGINT — katta butun son;
  • SERIAL — avtomatik oshib boruvchi son;
  • UUID — universal noyob identifikator;
  • VARCHAR — uzunligi cheklangan matn;
  • TEXT — uzun matn;
  • BOOLEAN — true yoki false;
  • DATE — sana;
  • TIMESTAMP — sana va vaqt;
  • NUMERIC — aniq sonli qiymat;
  • JSONJSON ma’lumot;
  • JSONB — optimallashtirilgan JSON ma’lumot.

Masalan, email uchun VARCHAR, maqola matni uchun TEXT, narx uchun NUMERIC, sozlama ma’lumotlari uchun JSONB ishlatilishi mumkin.

Primary key

PostgreSQL’da primary key jadvaldagi har bir qatorni yagona aniqlash uchun ishlatiladi.

Misol:

id SERIAL PRIMARY KEY

Primary key odatda quyidagi ko‘rinishlarda bo‘ladi:

  • auto-increment integer;
  • bigserial;
  • UUID;
  • composite key.

Primary key boshqa jadvallar bilan bog‘lanishda ham ishlatiladi.

Foreign key

Foreign key bir jadvaldagi qiymatni boshqa jadvaldagi primary key bilan bog‘laydi.

Masalan, orders jadvalida user_id ustuni users jadvalidagi id ustuniga bog‘lanishi mumkin.

Foreign key quyidagi munosabatlarni yaratishda ishlatiladi:

  • foydalanuvchi va buyurtma;
  • maqola va muallif;
  • mahsulot va kategoriya;
  • komment va foydalanuvchi;
  • to‘lov va buyurtma.

Foreign key ma’lumotlar orasidagi bog‘liqlikni database darajasida nazorat qiladi.

Index

Index PostgreSQL’da qidiruv va filterlashni tezlashtirish uchun ishlatiladi.

Index ko‘p ishlatiladigan ustunlarga qo‘yiladi:

  • email;
  • username;
  • slug;
  • created_at;
  • status;
  • category_id;
  • user_id;
  • is_active.

Masalan, foydalanuvchini email orqali topish ko‘p bajarilsa, email ustuniga index qo‘yish query tezligini oshiradi.

Unique constraint

Unique constraint ustundagi qiymatlar takrorlanmasligini ta’minlaydi.

Masalan:

  • email yagona bo‘lishi;
  • username takrorlanmasligi;
  • slug bitta maqola uchun yagona bo‘lishi;
  • telefon raqam takror kiritilmasligi.

PostgreSQL unique constraint orqali bunday qoidalarni database darajasida nazorat qiladi.

Transaction

PostgreSQL transaction bilan kuchli ishlaydi. Transaction bir nechta SQL amalni bitta yaxlit jarayon sifatida bajaradi.

Transaction buyruqlari:

  • BEGIN;
  • COMMIT;
  • ROLLBACK.

Masalan, buyurtma yaratish jarayonida quyidagi ishlar bitta transaction ichida bajarilishi mumkin:

  • buyurtma yozuvini yaratish;
  • buyurtma mahsulotlarini qo‘shish;
  • ombordagi mahsulot sonini kamaytirish;
  • to‘lov holatini yozish.

Agar jarayonning bir qismi xato bo‘lsa, transaction orqali o‘zgarishlar bekor qilinishi mumkin.

ACID

PostgreSQL ACID tamoyillarini qo‘llab-quvvatlaydi. ACID database transactionlarining ishonchliligini bildiradi.

ACID qismlari:

  • Atomicitytransaction to‘liq bajariladi yoki butunlay bekor qilinadi;
  • Consistencydatabase qoidalari buzilmaydi;
  • Isolation — bir transaction boshqasiga noto‘g‘ri ta’sir qilmaydi;
  • Durability — saqlangan o‘zgarishlar tizim nosozligidan keyin ham yo‘qolmaydi.

ACID moliyaviy tizimlar, buyurtmalar, to‘lovlar va muhim ma’lumotlar bilan ishlashda muhim hisoblanadi.

JSON va JSONB

PostgreSQL relational database bo‘lsa ham, JSON ma’lumotlar bilan ham ishlay oladi.

JSON bilan bog‘liq data typelar:

  • JSONJSON ma’lumotni matn ko‘rinishiga yaqin saqlaydi;
  • JSONBJSON’ni binary formatda saqlaydi va tezroq query qilishga moslashgan.

JSONB quyidagi holatlarda ishlatilishi mumkin:

  • moslashuvchan sozlamalar;
  • metadata;
  • dynamic fieldlar;
  • log ma’lumotlari;
  • tashqi API javoblari;
  • konfiguratsiya qiymatlari.

PostgreSQL JSONB ustunlariga index qo‘yish ham mumkin.

View

ViewSQL query asosida yaratilgan virtual jadval. View ma’lumotlarni tayyor ko‘rinishda olish uchun ishlatiladi.

View quyidagi holatlarda qo‘llanadi:

  • murakkab querylarni soddalashtirish;
  • hisobotlar yaratish;
  • foydalanuvchiga cheklangan ma’lumot ko‘rsatish;
  • bir nechta jadvalni bitta ko‘rinishda berish;
  • analytics natijalarini tayyorlash.

View ichida ma’lumot alohida saqlanmasligi mumkin, u query natijasi sifatida ko‘rinadi.

Materialized view

Materialized viewquery natijasini database’da saqlab qo‘yadigan view turi. Oddiy view har safar query bajaradi, materialized view esa oldindan hisoblangan natijani saqlaydi.

Materialized view quyidagi holatlarda ishlatiladi:

  • og‘ir hisobotlar;
  • analytics natijalari;
  • dashboard ko‘rsatkichlari;
  • ko‘p jadvaldan yig‘ilgan ma’lumotlar;
  • tez-tez o‘qiladigan, lekin kam yangilanadigan natijalar.

Materialized view ma’lumotlari vaqti-vaqti bilan refresh qilinadi.

Function

PostgreSQL ichida function yaratish mumkin. Function database ichida qayta ishlatiladigan mantiqni saqlaydi.

Function quyidagi vazifalarda ishlatilishi mumkin:

  • hisob-kitob qilish;
  • ma’lumotni formatlash;
  • murakkab querylarni soddalashtirish;
  • trigger bilan ishlash;
  • custom validation;
  • statistik natija qaytarish.

PostgreSQL’da functionlar SQL yoki PL/pgSQL orqali yozilishi mumkin.

Trigger

Trigger — jadvalda ma’lum bir amal bajarilganda avtomatik ishga tushadigan database mexanizmi.

Trigger quyidagi holatlarda ishlatiladi:

  • yozuv qo‘shilganda;
  • yozuv yangilanganda;
  • yozuv o‘chirilganda;
  • audit log yozishda;
  • avtomatik timestamp yangilashda;
  • bog‘liq ma’lumotni nazorat qilishda.

Masalan, foydalanuvchi ma’lumoti yangilanganda updated_at ustuni avtomatik yangilanishi mumkin.

Extension

PostgreSQL extensionlar orqali qo‘shimcha imkoniyatlar bilan kengaytiriladi.

Mashhur extensionlar:

  • uuid-ossp — UUID yaratish uchun;
  • pgcrypto — kriptografik funksiyalar uchun;
  • PostGIS — geografik ma’lumotlar bilan ishlash uchun;
  • pg_trgm — matn qidiruvini yaxshilash uchun;
  • citext — case-insensitive text uchun.

Extensionlar PostgreSQL imkoniyatlarini loyiha ehtiyojiga qarab kengaytiradi.

Backup va restore

PostgreSQL’da backup database nusxasini saqlash, restore esa uni qayta tiklash jarayonidir.

Backup va restore uchun ishlatiladigan vositalar:

Backup quyidagi holatlarda kerak bo‘ladi:

  • server nosozligi;
  • noto‘g‘ri migration;
  • ma’lumot tasodifan o‘chishi;
  • yangi serverga ko‘chish;
  • test muhiti yaratish.

Replication

PostgreSQL replication orqali ma’lumotlarni bir serverdan boshqa serverga ko‘chirish imkonini beradi.

Replication turlari:

Replication o‘qish yuklamasini bo‘lish, zaxira server yaratish va yuqori mavjudlik tizimlarida ishlatiladi.

PostgreSQL va backend

Backend ilovalar PostgreSQL bilan driver, ORM yoki query builder orqali ishlaydi.

PostgreSQL bilan ishlaydigan mashhur vositalar:

  • Django ORM;
  • SQLAlchemy;
  • Prisma;
  • TypeORM;
  • Sequelize;
  • Eloquent;
  • asyncpg;
  • psycopg.

Backend PostgreSQL’dan foydalanuvchi, mahsulot, buyurtma, token, session, log va boshqa ma’lumotlarni saqlash uchun foydalanadi.

PostgreSQL va Docker

PostgreSQL Docker container ichida ham ishlatilishi mumkin. Bu development, test va deployment jarayonlarida qulaylik yaratadi.

Docker muhitida PostgreSQL uchun odatda quyidagilar sozlanadi:

Masalan, Docker Compose orqali PostgreSQL backend ilova bilan bitta tarmoqda ishlashi mumkin.

Bog‘liq tushunchalar

Database, SQL, Table, Query, Index, Transaction, JSON, Backend, ORM, Docker, Backup, Replication