Əsas məzmuna keçin

PostgreSQL

  • Açıq Mənbəli RDBMS: PostgreSQL güclü, açıq mənbəli obyekt-relational verilənlər bazası sistemidir.
  • ACID Uyğunluğu: Atomicity, Consistency, Isolation, Durability prinsiplərinə tam uyğundur.
  • Genişləndirilə Bilən: Öz funksiyalarınızı, operatorlarınızı və məlumat tiplərini yarada bilərsiniz.
  • Yüksək Performans: Query planlaşdırma, indeksləmə və optimizasiya imkanları.
  • Zəngin Məlumat Tipləri: JSON, XML, Array, hstore, geometric və digər xüsusi tiplər.
  • MVCC: Multi-Version Concurrency Control vasitəsilə yüksək konkurent əməliyyatlar.
  • Replikasiya: Streaming replication, logical replication dəstəyi.
  • Extensibility: Pləntyonlar vasitəsilə genişləndirilə bilər (PostGIS, pg_stat_statements və s.).

Əsas Xüsusiyyətlər

Məlumat Tipləri

  • Numeric: INTEGER, BIGINT, DECIMAL, NUMERIC, REAL, DOUBLE PRECISION
  • String: CHAR, VARCHAR, TEXT
  • Date/Time: DATE, TIME, TIMESTAMP, INTERVAL
  • Boolean: BOOLEAN
  • Binary: BYTEA
  • JSON: JSON, JSONB (binary JSON)
  • Array: İstənilən məlumat tipində massiv
  • UUID: Universal Unique Identifier
  • Geometric: POINT, LINE, POLYGON və s.
  • Network: INET, CIDR, MACADDR

PostgreSQL vs Digər Verilənlər Bazaları

XüsusiyyətPostgreSQLMySQLOracleSQL Server
LisenziyaAçıq mənbəli (MIT)Açıq mənbəli/KommersialKommersialKommersial
ACIDTam dəstəkTam dəstəkTam dəstəkTam dəstək
JSON DəstəyiJSONB (binary)JSONJSONJSON
Full-Text SearchBuilt-inLIMITEDOracle TextFull-Text
ReplikasiyaStreaming, LogicalMaster-Slave, GroupMulti-MasterAlways On
Window FunctionsVarVarVarVar
Common Table ExpressionsVarVarVarVar
PerformansYüksəkYüksəkÇox yüksəkYüksək
ExtensibilityÇox yüksəkOrtaOrtaAşağı

PostgreSQL İstifadə Sahələri

  • Web Applications: Django, Rails, Node.js tətbiqləri üçün
  • Geospatial Applications: PostGIS ilə GIS tətbiqləri
  • Financial Systems: ACID uyğunluğu və transaction dəstəyi
  • Data Warehousing: Böyük həcmli məlumat analizi
  • Time Series Data: TimescaleDB extension ilə
  • Document Store: JSONB ilə NoSQL kimi istifadə
  • Analytics: Complex queries və reporting
  • Scientific Data: Kompleks məlumat tipləri dəstəyi

Ümumi PostgreSQL Əmrləri

Verilənlər Bazası Əməliyyatları

-- Verilənlər bazası yarat
CREATE DATABASE mydb;

-- Verilənlər bazasına qoşul
\c mydb

-- Cədvəlləri listələ
\dt

-- Verilənlər bazasını sil
DROP DATABASE mydb;

Cədvəl Əməliyyatları

-- Cədvəl yarat
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Cədvəl strukturunu gör
\d users

-- Sütun əlavə et
ALTER TABLE users ADD COLUMN age INTEGER;

-- Cədvəli sil
DROP TABLE users;

İndeks Əməliyyatları

-- B-tree indeks (default)
CREATE INDEX idx_users_email ON users(email);

-- Unique indeks
CREATE UNIQUE INDEX idx_users_username ON users(username);

-- Partial indeks
CREATE INDEX idx_active_users ON users(email) WHERE active = true;

-- Composite indeks
CREATE INDEX idx_users_name_email ON users(last_name, first_name);

-- GIN indeks (JSON, Array üçün)
CREATE INDEX idx_data_jsonb ON documents USING GIN (data);

Query Əməliyyatları

-- SELECT
SELECT * FROM users WHERE age > 25;

-- JOIN
SELECT u.username, o.order_date
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

-- Aggregation
SELECT COUNT(*), AVG(age) FROM users;

-- Window Functions
SELECT username, age,
RANK() OVER (ORDER BY age DESC) as age_rank
FROM users;

-- CTE (Common Table Expression)
WITH active_users AS (
SELECT * FROM users WHERE active = true
)
SELECT * FROM active_users WHERE age > 30;

Transaction Əməliyyatları

-- Transaction başlat
BEGIN;

-- Əməliyyatlar
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- Commit et
COMMIT;

-- Və ya rollback et
ROLLBACK;

Performance Tuning

Query Optimization

-- Query plan-a bax
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';

-- Statistika yenilə
ANALYZE users;

-- Vacuum et
VACUUM FULL users;

Configuration Parameters

# postgresql.conf
shared_buffers = 256MB # RAM-ın 25%-i
effective_cache_size = 1GB # RAM-ın 50-75%-i
work_mem = 4MB # Hər query üçün
maintenance_work_mem = 64MB # VACUUM, CREATE INDEX üçün
max_connections = 100 # Maksimum bağlantı sayı

Replikasiya

Streaming Replication

-- Primary server-də
# postgresql.conf
wal_level = replica
max_wal_senders = 3
wal_keep_size = 64

-- Standby server-də
# recovery.conf
primary_conninfo = 'host=primary_host port=5432'

Logical Replication

-- Publisher-də
CREATE PUBLICATION my_publication FOR TABLE users, orders;

-- Subscriber-də
CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=publisher_host port=5432 dbname=mydb'
PUBLICATION my_publication;

Best Practices

  1. İndeksləmə: Tez-tez axtarılan sütunlara indeks əlavə edin
  2. Connection Pooling: PgBouncer və ya pgpool istifadə edin
  3. VACUUM: Müntəzəm VACUUM və ANALYZE əməliyyatları
  4. Monitoring: pg_stat_statements, log analysis
  5. Backup: Regular backup strategiyası (pg_dump, pg_basebackup)
  6. Security: SSL connections, role-based access control
  7. Query Optimization: EXPLAIN ANALYZE istifadə edərək query-ləri optimize edin
  8. Partitioning: Böyük cədvəllər üçün table partitioning

Əlavə Resurslar