PostgreSQL Sistem Tabloları ve Fonksiyonları (pg_catalog)

İngilizce'ye Geç

PostgreSQL Sistem Tabloları, Fonksiyonları ve pg_catalog Şeması

Kısa Özet: PostgreSQL Sistem Tabloları (pg_catalog) Nedir?

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.

PostgreSQL pg_catalog şeması ve sistem tabloları yönetimi
Görsel: PostgreSQL System Catalogs Mimarisi
İlgili İçerik: Eğer sistem tablolarını okurken karşılaştığınız Relation, Tuple veya Buffer gibi terimlerin ne anlama geldiğini bilmiyorsanız, PostgreSQL Nedir ve Terminolojisi rehberimizi mutlaka inceleyin.

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.
  • psql komut satırı aracındayken \dS komutunu ç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 UPDATE veya DELETE ile 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.
İlgili İçerik: Sunucudaki aktif transactionları izlerken COMMIT veya ROLLBACK unutulduğu için (Idle in transaction) kilitlenen sorguları tespit etmek isteyebilirsiniz. PostgreSQL Transaction Yönetimi rehberimizi inceleyerek bu hataları nasıl önleyeceğinizi öğrenebilirsiniz.

Sistem Bakım ve Yapılandırma

  • SELECT pg_reload_conf(); : Sunucuyu yeniden başlatmadan (Restart atmadan), postgresql.conf ve pg_hba.conf dosyalarındaki değişiklikleri sisteme uygular.
  • SELECT pg_start_backup('etiket'); ve SELECT 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.

Etiketler: postgresql pg_catalog, pg_stat_activity, postgresql sistem tabloları, postgresql kill process, database administration

Son Güncelleme: 2026

Latest Software Developers - Yazılım Blog Yazarı Profil Resmi

Yazar

LatestSoftwareDevelopers

Güncel yazılım teknolojilerinin takip edildiği blog.

Database ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *