PostgreSQL Transaction Kontrolleri ve Savepoint’lerin Yapısı
Bu yazıda PostgreSQL transaction kavramını detaylı şekilde inceleyeceğiz.
BEGIN, COMMIT, ROLLBACK ve SAVEPOINT kullanımı ile
transaction yönetimini örneklerle açıklayacağız.
PostgreSQL Transaction Nedir?
Transaction, veritabanında birden fazla işlemin tek bir bütün olarak çalışmasını sağlar. Bu işlemler ya hep gerçekleşir ya da hiç gerçekleşmez (all-or-nothing).
Bu yapı veri tutarlılığını korumak için kritik öneme sahiptir.
PostgreSQL Transaction Komutları
BEGINveyaSTART TRANSACTION→ Transaction başlatırCOMMIT→ Değişiklikleri kalıcı hale getirirROLLBACK→ Değişiklikleri geri alır
Transaction Isolation Levels
PostgreSQL üç temel izolasyon seviyesini destekler:
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
Bu seviyeler, transaction’ların birbirlerinin verilerini ne kadar görebileceğini belirler.
READ COMMITTED
Sadece commit edilmiş verileri görür. Dirty read’e izin vermez.
SERIALIZABLE
En katı seviyedir. Transaction’lar sanki sırayla çalışıyormuş gibi davranır.
SAVEPOINT Nedir?
Transaction içinde belirli bir noktaya işaret koymak için SAVEPOINT kullanılır.
Bu sayede işlemin tamamını değil sadece bir kısmını geri alabilirsiniz.
SAVEPOINT my_savepoint;
ROLLBACK TO my_savepoint;
Bu yapı özellikle büyük transaction’larda hata yönetimini kolaylaştırır.
Transaction Örneği
BEGIN;
UPDATE maaslar
SET alinan_maas = alinan_maas - 100.00
WHERE isim = 'A';
SAVEPOINT my_savepoint;
UPDATE maaslar
SET alinan_maas = alinan_maas + 100.00
WHERE isim = 'B';
ROLLBACK TO my_savepoint;
UPDATE maaslar
SET alinan_maas = alinan_maas + 100.00
WHERE isim = 'C';
COMMIT;
Bu örnekte:
- A kişisinden para düşülür
- B kişisine aktarım yapılır ancak hata oluşur
- ROLLBACK ile SAVEPOINT’e dönülür
- Para C kişisine aktarılır
Two-Phase Commit (2PC)
PostgreSQL, dağıtık sistemlerde kullanılan iki aşamalı commit (2PC) mekanizmasını destekler.
PREPARE TRANSACTION transaction_id;
COMMIT PREPARED transaction_id;
ROLLBACK PREPARED transaction_id;
Bu yapı, birden fazla veri kaynağı arasında tutarlılık sağlar.
Snapshot Kullanımı
SELECT pg_export_snapshot();
SET TRANSACTION SNAPSHOT snapshot_id;
Snapshot sayesinde aynı veri görünümü birden fazla transaction tarafından paylaşılabilir.
Sık Yapılan Hatalar
- ROLLBACK yerine COMMIT kullanmak
- SAVEPOINT kullanmadan büyük transaction yönetmek
- Yanlış isolation level seçmek
- Transaction açık bırakmak
Sonuç
PostgreSQL transaction yönetimi, veri bütünlüğü ve güvenliği açısından kritik bir konudur. BEGIN, COMMIT, ROLLBACK ve SAVEPOINT kullanımı doğru öğrenildiğinde, daha güvenli ve hatasız veritabanı işlemleri gerçekleştirilebilir.