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ət | PostgreSQL | MySQL | Oracle | SQL Server |
|---|---|---|---|---|
| Lisenziya | Açıq mənbəli (MIT) | Açıq mənbəli/Kommersial | Kommersial | Kommersial |
| ACID | Tam dəstək | Tam dəstək | Tam dəstək | Tam dəstək |
| JSON Dəstəyi | JSONB (binary) | JSON | JSON | JSON |
| Full-Text Search | Built-in | LIMITED | Oracle Text | Full-Text |
| Replikasiya | Streaming, Logical | Master-Slave, Group | Multi-Master | Always On |
| Window Functions | Var | Var | Var | Var |
| Common Table Expressions | Var | Var | Var | Var |
| Performans | Yüksək | Yüksək | Çox yüksək | Yüksək |
| Extensibility | Çox yüksək | Orta | Orta | Aş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
- İndeksləmə: Tez-tez axtarılan sütunlara indeks əlavə edin
- Connection Pooling: PgBouncer və ya pgpool istifadə edin
- VACUUM: Müntəzəm VACUUM və ANALYZE əməliyyatları
- Monitoring: pg_stat_statements, log analysis
- Backup: Regular backup strategiyası (pg_dump, pg_basebackup)
- Security: SSL connections, role-based access control
- Query Optimization: EXPLAIN ANALYZE istifadə edərək query-ləri optimize edin
- Partitioning: Böyük cədvəllər üçün table partitioning
Əlavə Resurslar
- Rəsmi Sənədlər: https://www.postgresql.org/docs/
- Performance Wiki: https://wiki.postgresql.org/wiki/Performance_Optimization
- PostGIS: https://postgis.net/
- Community: https://www.postgresql.org/community/