PostgreSQL Sistem Tabloları ve Fonksiyonları (pg_catalog)
PostgreSQL Sistem Tabloları, Fonksiyonları ve pg_catalog Şeması
PostgreSQL pg_catalog, veritabanının kendi iç yapısına ait tüm meta verileri (tablolar, indeksler, roller, şemalar ve ayarlar) tutan yerleşik sistem şemasıdır. Bu şema içindeki Sistem Tabloları (Örn: pg_class, pg_stat_activity, pg_locks) sayesinde veritabanı yöneticileri (DBA) çalışan sorguları izleyebilir, performans analizi yapabilir ve sistem kilitlenmelerini (Lock) tespit edebilir.
PostgreSQL sadece bir veri depolama aracı değil, kendi kendini yönetebilen devasa bir işletim sistemi gibidir. Bir veritabanının boyutunu nasıl ölçersiniz? Sisteminizi kilitleyen yavaş bir sorguyu nasıl bulup sonlandırırsınız? İşte tüm bu soruların cevabı PostgreSQL Veri Sözlüğü (Data Dictionary) ve sistem fonksiyonlarında gizlidir.
1. PostgreSQL Veri Sözlüğü (Data Dictionary) Nedir?
Siz veritabanına yeni bir tablo eklediğinizde veya bir kullanıcıya yetki verdiğinizde, PostgreSQL bu bilgileri unutmamak için kendi içindeki özel tablolara kaydeder. İşte veritabanının anatomisini (meta verilerini) tutan, sistem seviyesindeki bu devasa tablo ve fonksiyonlar bütününe Veri Sözlüğü denir.
- Tablolar ve İndeksler (Indexes)
- Şemalar (Schemas) ve Veritabanları
- Kullanıcılar, Roller ve Yetkiler
2. Katalog Şeması (pg_catalog) Nedir?
PostgreSQL'de bahsettiğimiz bu sistem nesneleri ortalıkta başıboş gezmez; hepsi pg_catalog isimli özel bir şema (namespace) altında toplanmıştır.
- Yeni bir veritabanı yarattığınızda, bu katalog template1 adlı ana veritabanından kopyalanır.
psqlkomut satırı aracındayken\dSkomutunu çalıştırırsanız, pg_catalog içindeki tüm sistem tablo ve görünümlerini (view) listeleyebilirsiniz.- Sistem katalogları normal bir tablo gibi çalışır (SELECT atabilirsiniz) ancak içindeki verileri
UPDATEveyaDELETEile manuel olarak değiştirmemeniz gerekir. Sistem SQL komutlarıyla (Örn: CREATE TABLE) arka planda otomatik güncellenir.
3. En Önemli PostgreSQL Sistem Tabloları
Performans analizi (Tuning) ve sorun giderme (Troubleshooting) için aşağıdaki sistem tablolarını mutlaka bilmelisiniz:
| Sistem Tablosu | İçerdiği Bilgi / Görevi |
|---|---|
| pg_stat_activity | Aktif olarak veritabanına bağlı olan kullanıcıları ve anlık çalıştırdıkları SQL sorgularını gösterir. (Sistemi yoran sorguları bulmak için 1 numaralı araçtır). |
| pg_class | Tüm tablolar, indeksler, görünümler (view) ve sequence'ler hakkında temel bilgileri barındırır. |
| pg_locks | Tablolar veya satırlar üzerinde var olan ya da beklemede olan kilitleri (Lock) gösterir. (Deadlock çözümü için kritik). |
| pg_settings | Veritabanının o anki geçerli konfigürasyon parametrelerini (postgresql.conf) okumak için kullanılır. |
| pg_database | Cluster (Sunucu) içindeki tüm veritabanlarının listesini ve sahiplerini tutar. |
| pg_roles | Sisteme kayıtlı kullanıcıların (Rollerin) listesini ve giriş yetkilerini barındırır. |
4. Sistem Bilgi Fonksiyonları
PostgreSQL, sadece tablolar değil, o anki oturumla (Session) ilgili bilgileri almanızı sağlayan yerleşik fonksiyonlar da sunar:
SELECT current_catalog;: Bağlı olduğunuz aktif veritabanının adını döndürür.SELECT current_user;: Sorguyu çalıştıran aktif kullanıcının (rolün) adını verir.SELECT pg_backend_pid();: Sizin oturumunuzu yöneten sürecin (Process ID - PID) numarasını verir.SELECT version();: Sunucudaki PostgreSQL sürümünü (Örn: PostgreSQL 16.2) döner.
5. DBA'ler İçin Veritabanı Yönetim Fonksiyonları
Bir Veritabanı Yöneticisinin (DBA) günlük bakım ve acil müdahale işlemlerinde en sık kullandığı hayat kurtarıcı PostgreSQL fonksiyonları şunlardır:
Sorgu ve Süreç Sonlandırma
Eğer pg_stat_activity tablosunda saatlerdir bitmeyen ve sistemi kilitleyen bir sorgu görürseniz (PID numarasını alarak) şu komutları kullanırsınız:
SELECT pg_cancel_backend(pid);: Belirtilen PID numarasına sahip çalışmakta olan sorguyu iptal eder (Bağlantıyı koparmaz).SELECT pg_terminate_backend(pid);: İşlemi daha sert keser, bağlantıyı (session) tamamen koparır ve süreci öldürür.
Boyut (Disk Alanı) Ölçme
Tablolarınızın veya veritabanınızın diskte ne kadar yer kapladığını öğrenmek için (Bayt değerini okunabilir MB/GB formatına çevirmek için pg_size_pretty ile birlikte kullanılır):
SELECT pg_size_pretty(pg_database_size('veritabani_adi'));: Tüm veritabanının boyutunu MB/GB cinsinden verir.SELECT pg_size_pretty(pg_total_relation_size('tablo_adi'));: Tablonun içindeki indeksler ve TOAST verileri ile birlikte diskte kapladığı toplam alanı verir.SELECT pg_size_pretty(pg_table_size('tablo_adi'));: Tablonun sadece ham verisinin (indeksler hariç) boyutunu verir.
Sistem Bakım ve Yapılandırma
SELECT pg_reload_conf();: Sunucuyu yeniden başlatmadan (Restart atmadan),postgresql.confvepg_hba.confdosyalarındaki değişiklikleri sisteme uygular.SELECT pg_start_backup('etiket');veSELECT pg_stop_backup();: Veritabanının fiziksel yedeğini (Base Backup) almak için sunucuyu hazırlar ve işlemi bitirir.
6. Sık Sorulan Sorular (SSS)
pg_catalog şeması silinebilir mi?
Kesinlikle hayır. pg_catalog şeması PostgreSQL'in beynidir. Eğer bu şemaya zarar verirseniz veritabanı kendi yapısını tanıyamaz ve çalışmayı durdurur.
Kilitlenen (Lock) sorguları nasıl bulurum?
Hangi tablonun veya satırın kilitlendiğini görmek için pg_locks tablosunu, bu kilitlenmeye sebep olan çalışan sorguyu bulmak için ise pg_stat_activity tablosunu birlikte sorgulamalısınız.
Bir sorguyu zorla iptal etmek (kill) güvenli midir?
Evet güvenlidir. pg_cancel_backend(pid) veya pg_terminate_backend(pid) kullandığınızda, PostgreSQL arka planda otomatik olarak ROLLBACK işlemi uygulayarak veritabanı tutarlılığını korur.
Sonuç
Bu rehberde, bir veritabanı yöneticisinin en büyük silahları olan PostgreSQL Sistem Tabloları (pg_catalog) ve Yönetim Fonksiyonlarını inceledik. Özellikle pg_stat_activity tablosu ile sistemi izlemek, pg_terminate_backend ile sorunlu sorguları öldürmek ve boyut ölçüm fonksiyonlarıyla kapasite planlaması yapmak, canlı (Production) ortamların ayakta kalması için şarttır.