PostgreSQL’i Ubuntu 22.04 Üzerine Kurulumu ve Kullanımı: Kapsamlı Bir Rehber
Veritabanları, modern yazılım uygulamalarının temelini oluşturur ve verilerin depolanması, yönetilmesi ve erişilmesi için kritik öneme sahiptir. Bu alandaki en güçlü ve güvenilir açık kaynaklı ilişkisel veritabanı yönetim sistemlerinden biri de PostgreSQL’dir. Geniş özellikleri, ACID uyumluluğu, genişletilebilirliği ve sağlam mimarisi sayesinde kurumsal düzeyde uygulamalardan kişisel projelere kadar geniş bir yelpazede tercih edilmektedir. Bu makale, PostgreSQL’i Ubuntu 22.04 işletim sistemi üzerine nasıl kuracağınızı, temel yapılandırmaları nasıl yapacağınızı ve veritabanını günlük operasyonlarda nasıl kullanacağınızı adım adım detaylı bir şekilde açıklamaktadır. Amacımız, hem yeni başlayanlar hem de orta düzey kullanıcılar için kapsamlı ve anlaşılır bir rehber sunarak PostgreSQL dünyasına sağlam bir giriş yapmalarını sağlamaktır.
PostgreSQL Nedir?
PostgreSQL, “Post-GRE” olarak da anılır, kökenleri 1980’lerin ortalarına dayanan, güçlü, açık kaynaklı bir ilişkisel veritabanı yönetim sistemidir (RDBMS). Akademik bir proje olarak Berkeley Üniversitesi’nde başlayan ve daha sonra gönüllü bir topluluk tarafından geliştirilmeye devam eden PostgreSQL, günümüzde dünya genelinde milyonlarca kullanıcıya ve binlerce kuruma hizmet vermektedir. Temel özellikleri şunlardır:
- Açık Kaynak ve Ücretsiz: PostgreSQL, BSD lisansı altında dağıtılır, bu da onu kullanmak, değiştirmek ve dağıtmak için tamamen ücretsiz ve özgür kılar. Ticari lisans maliyetleri olmadan güçlü bir veritabanı çözümü arayanlar için idealdir.
- ACID Uyumluluğu: Atomicity (Atomiklik), Consistency (Tutarlılık), Isolation (İzolasyon) ve Durability (Dayanıklılık) prensiplerine tam uyumludur. Bu, veritabanı işlemlerinin güvenilir ve tutarlı bir şekilde gerçekleştiğini garanti eder, veri bütünlüğünü en üst düzeyde korur.
- Genişletilebilirlik: PostgreSQL, kullanıcıların kendi veri türlerini, fonksiyonlarını, operatörlerini, agregalarını ve indeksleme yöntemlerini tanımlamasına olanak tanıyan oldukça genişletilebilir bir mimariye sahiptir. Bu, özel gereksinimleri olan uygulamalar için büyük bir avantajdır.
- Güvenilirlik ve Veri Bütünlüğü: İşlem günlüğü (WAL – Write-Ahead Logging) sayesinde sistem çökse bile veri kaybını en aza indirir. Ayrıca, karmaşık kısıtlamalar (CHECK, FOREIGN KEY, UNIQUE) ve tetikleyiciler (triggers) ile veri bütünlüğünü sağlamak için güçlü araçlar sunar.
- Gelişmiş Özellikler: Eşzamanlılık kontrolü (MVCC – Multi-Version Concurrency Control), gelişmiş indeksleme türleri (B-tree, GIN, GiST, SP-GiST, BRIN), JSON/JSONB desteği, coğrafi veri desteği (PostGIS eklentisi ile), tam metin arama ve tablo bölümlendirme gibi birçok gelişmiş özelliğe sahiptir.
- Platform Bağımsızlığı: Linux, Windows, macOS, Solaris ve BSD gibi birçok farklı işletim sistemi üzerinde çalışabilir.
- Büyük ve Aktif Topluluk: Geniş ve aktif bir geliştirici ve kullanıcı topluluğuna sahiptir. Bu, sorun giderme, destek alma ve sürekli gelişim için önemli bir kaynaktır.
Bu özellikler, PostgreSQL’i sadece basit web uygulamaları için değil, aynı zamanda finansal sistemler, coğrafi bilgi sistemleri, büyük veri analizi ve yüksek trafikli e-ticaret platformları gibi talepkar ortamlar için de tercih edilen bir seçenek haline getirir.
Ön Gereksinimler
PostgreSQL kurulumuna başlamadan önce aşağıdaki ön gereksinimlerin karşılandığından emin olunuz:
- Ubuntu 22.04 İşletim Sistemi: Temiz bir Ubuntu 22.04 (Jammy Jellyfish) kurulumuna sahip bir sunucu veya sanal makine.
- Sudo Yetkileri: Kurulum ve yapılandırma işlemleri için
sudokomutunu kullanabilecek bir kullanıcı hesabına sahip olmanız gerekmektedir. Genellikle bu, ilk kurulumda oluşturduğunuz kullanıcı hesabıdır. - İnternet Bağlantısı: Gerekli paketleri indirmek için aktif bir internet bağlantısı.
- Temel Linux Bilgisi: Komut satırı (terminal) kullanımı hakkında temel bilgiye sahip olmak, rehberi takip etmenizi kolaylaştıracaktır.
Kurulum Adımları
Ubuntu 22.04 üzerinde PostgreSQL kurulumu oldukça basittir ve Ubuntu’nun varsayılan APT paket yöneticisi aracılığıyla gerçekleştirilebilir.
Sistem Güncellemesi
Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizin paket listelerini güncellemek ve mevcut paketleri yükseltmek iyi bir uygulamadır. Bu, bağımlılık sorunlarını önler ve en son güvenlik yamalarına sahip olmanızı sağlar.
sudo apt update
sudo apt upgrade -y
sudo apt update komutu, yerel paket indeksini güncellerken, sudo apt upgrade -y komutu kurulu paketleri en son sürümlerine yükseltir ve -y bayrağı tüm sorulara otomatik olarak “evet” yanıtı verir.
PostgreSQL Paketlerinin Kurulumu
Ubuntu depolarında PostgreSQL’in en son kararlı sürümü genellikle bulunur. Kurulum için aşağıdaki komutu kullanabilirsiniz:
sudo apt install postgresql postgresql-contrib -y
Bu komut iki ana paketi kurar:
postgresql: PostgreSQL sunucu paketini ve temel yardımcı programları içerir.postgresql-contrib: PostgreSQL için ek modüller ve yardımcı programlar içerir. Bu paket, performans izleme araçları, özel veri tipleri ve diğer kullanışlı eklentileri barındırabilir. Çoğu kurulum için tavsiye edilir.
Kurulum tamamlandığında, PostgreSQL servisi otomatik olarak başlatılır ve sistem başlangıcında çalışacak şekilde yapılandırılır.
Kurulumun Doğrulanması
PostgreSQL servisinin başarıyla çalışıp çalışmadığını kontrol etmek için systemctl komutunu kullanabilirsiniz:
systemctl status postgresql
Çıktıda “active (exited)” veya “active (running)” ifadelerini görmelisiniz. “running” olması, servisin aktif olarak çalıştığını gösterir. Eğer “active (exited)” görüyorsanız, bu durum PostgreSQL’in isteğe bağlı olarak çalıştığını ve bir bağlantı geldiğinde aktif hale geldiğini gösterir. Her iki durum da genellikle sorunsuz bir kurulumu işaret eder. Ayrıca, servisin sistem başlangıcında otomatik olarak başlayacak şekilde etkinleştirildiğinden emin olabilirsiniz:
systemctl is-enabled postgresql
Çıktı olarak “enabled” görmelisiniz.
PostgreSQL Servisinin Yönetimi
PostgreSQL servisini yönetmek için aşağıdaki systemctl komutlarını kullanabilirsiniz:
- Başlatma: PostgreSQL servisini başlatır.
sudo systemctl start postgresql
sudo systemctl stop postgresql
sudo systemctl restart postgresql
systemctl status postgresql
sudo systemctl enable postgresql
sudo systemctl disable postgresql
PostgreSQL Kullanıcısı ve Rolleri
PostgreSQL, veritabanı erişimini yönetmek için “roller” kavramını kullanır. Kurulum sırasında otomatik olarak postgres adında bir süper kullanıcı rolü oluşturulur ve bu rol, işletim sistemindeki postgres kullanıcısıyla ilişkilendirilir. Varsayılan olarak, bu postgres kullanıcısı, veritabanına erişmek için tek yetkili kullanıcıdır.
postgres Kullanıcısı ile Bağlantı
postgres kullanıcısı olarak komut satırı aracı olan psql‘e bağlanmak için, önce işletim sistemindeki postgres kullanıcısına geçiş yapmanız gerekir:
sudo -i -u postgres
Bu komut sizi postgres kullanıcısının kabuğuna taşır. Şimdi psql komutunu kullanarak veritabanı istemcisine bağlanabilirsiniz:
psql
Artık PostgreSQL komut satırı arayüzündesiniz. Çıkmak için \q yazıp Enter tuşuna basabilirsiniz. İşletim sistemi kullanıcınıza geri dönmek için ise exit yazıp Enter tuşuna basmanız yeterlidir.
Alternatif olarak, doğrudan mevcut kullanıcınızdan postgres kullanıcısı olarak psql‘e bağlanabilirsiniz:
sudo -u postgres psql
Yeni Bir Veritabanı Kullanıcısı Oluşturma
Güvenlik ve iyi uygulama açısından, uygulamalarınız veya diğer kullanıcılarınız için postgres süper kullanıcısı yerine özel, daha az yetkili veritabanı kullanıcıları oluşturmak en iyisidir. Yeni bir kullanıcı oluşturmak için yine postgres kullanıcısı olarak bağlanmanız gerekir:
sudo -u postgres createuser --interactive
Bu komut size aşağıdaki soruları sorarak yeni bir kullanıcı oluşturmanıza yardımcı olacaktır:
Enter name of role to add:(Oluşturmak istediğiniz kullanıcının adını girin, örn:myuser)Shall the new role be a superuser? (y/n)(Süper kullanıcı olsun mu? Genelliklen)Shall the new role create databases? (y/n)(Veritabanı oluşturabilsin mi? İhtiyaca göreyveyan)Shall the new role create new roles? (y/n)(Yeni rol oluşturabilsin mi? Genelliklen)
Kullanıcı oluşturulduktan sonra, bu kullanıcı için bir şifre belirlemek iyi bir fikirdir. psql arayüzüne girip aşağıdaki komutu çalıştırın:
sudo -u postgres psql
ALTER USER myuser WITH PASSWORD 'gucl_sifre';
'gucl_sifre' kısmını kendi belirlediğiniz güvenli bir şifre ile değiştirin.
Yeni Bir Veritabanı Oluşturma
Uygulamalarınız için ayrı veritabanları oluşturmak, veri izolasyonu ve yönetimi açısından önemlidir. Yeni bir veritabanı oluşturmak için createdb komutunu kullanabilirsiniz. Yine postgres kullanıcısı olarak çalıştırın:
sudo -u postgres createdb mydatabase
Bu komut, mydatabase adında yeni bir veritabanı oluşturur. Varsayılan olarak, bu veritabanının sahibi postgres kullanıcısıdır.
Kullanıcıya Veritabanı Yetkileri Verme
Oluşturduğunuz myuser kullanıcısının mydatabase veritabanına tam erişime sahip olması için veritabanının sahipliğini değiştirebilirsiniz:
sudo -u postgres psql -c "ALTER DATABASE mydatabase OWNER TO myuser;"
Artık myuser kullanıcısı, mydatabase veritabanına bağlanabilir ve üzerinde işlem yapabilir.
Veritabanı Oluşturma ve Yönetme
PostgreSQL’in komut satırı arayüzü olan psql, veritabanı oluşturma, tablo tanımlama, veri ekleme, sorgulama ve diğer yönetim görevleri için güçlü bir araçtır.
psql ile Veritabanına Bağlanma
Oluşturduğunuz myuser kullanıcısı ve mydatabase veritabanı ile bağlanmak için aşağıdaki komutu kullanabilirsiniz:
psql -d mydatabase -U myuser
Bu komut sizden myuser için belirlediğiniz şifreyi isteyecektir. Başarılı bir şekilde bağlandığınızda mydatabase=> gibi bir komut istemi göreceksiniz.
Temel SQL Komutları
psql arayüzündeyken, veritabanınızı yönetmek için standart SQL komutlarını ve psql‘e özgü meta komutları kullanabilirsiniz.
Veritabanı Listeleme
Mevcut tüm veritabanlarını listelemek için:
\l
Tablo Listeleme
Mevcut veritabanındaki tabloları listelemek için:
\dt
Kullanıcı Listeleme
Mevcut tüm veritabanı rollerini (kullanıcılarını) listelemek için:
\du
Tablo Oluşturma
Örnek bir tablo oluşturalım. Örneğin, bir “ürünler” tablosu:
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Bu komut, products adında bir tablo oluşturur. SERIAL PRIMARY KEY otomatik artan birincil anahtar oluşturur, VARCHAR(255) değişken uzunlukta metin alanı, DECIMAL(10, 2) ondalık sayı, TEXT uzun metin alanı ve TIMESTAMP zaman damgası alanıdır.
Veri Ekleme
Oluşturduğumuz tabloya veri ekleyelim:
INSERT INTO products (name, price, description) VALUES
('Dizüstü Bilgisayar', 1200.00, 'Güçlü ve taşınabilir dizüstü bilgisayar.'),
('Akıllı Telefon', 800.00, 'En yeni model akıllı telefon.'),
('Kablosuz Kulaklık', 150.00, 'Yüksek kaliteli ses sunan kablosuz kulaklık.');
Veri Sorgulama
Tablodaki tüm verileri sorgulamak için:
SELECT * FROM products;
Belirli bir koşula göre veri sorgulamak için:
SELECT name, price FROM products WHERE price > 500.00;
Veri Güncelleme
Mevcut bir kaydı güncellemek için:
UPDATE products SET price = 1150.00 WHERE name = 'Dizüstü Bilgisayar';
Veri Silme
Belirli bir kaydı silmek için:
DELETE FROM products WHERE name = 'Kablosuz Kulaklık';
Tablo Silme
Bir tabloyu tamamen silmek için:
DROP TABLE products;
Bu komut geri alınamaz, dikkatli kullanın.
Veritabanından Çıkış
psql komut satırı arayüzünden çıkmak için:
\q
Uzaktan Bağlantı İçin Yapılandırma
Varsayılan olarak, PostgreSQL yalnızca yerel makineden (localhost) bağlantılara izin verir. Eğer veritabanınıza başka bir makineden (örneğin bir uygulama sunucusundan veya geliştirme ortamından) erişmeniz gerekiyorsa, bu yapılandırmayı değiştirmeniz gerekir. Bu işlem iki ana yapılandırma dosyasında yapılır ve güvenlik riskleri taşıdığından dikkatli yapılmalıdır.
postgresql.conf Dosyası
Bu dosya, PostgreSQL sunucusunun genel davranışını kontrol eden ana yapılandırma dosyasıdır. Uzaktan bağlantılara izin vermek için listen_addresses parametresini düzenlemeniz gerekir.
Yapılandırma dosyası genellikle /etc/postgresql/ yolunda bulunur. Ubuntu 22.04 için bu genellikle /main/postgresql.conf/etc/postgresql/14/main/postgresql.conf şeklindedir.
sudo nano /etc/postgresql/14/main/postgresql.conf
Dosya içinde listen_addresses satırını bulun. Varsayılan olarak şu şekilde yorum satırı yapılmış veya sadece localhost olarak ayarlanmış olabilir:
#listen_addresses = 'localhost' # what IP address(es) to listen on;
Tüm ağ arayüzlerinden bağlantılara izin vermek için bu satırı aşağıdaki gibi değiştirin:
listen_addresses = '*' # what IP address(es) to listen on;
Sadece belirli bir IP adresinden bağlantıya izin vermek isterseniz, örneğin sunucunuzun özel IP adresi 192.168.1.100 ise:
listen_addresses = 'localhost,192.168.1.100'
Değişiklikleri kaydedin ve dosyayı kapatın (Nano’da: Ctrl+O, Enter, Ctrl+X).
pg_hba.conf Dosyası
Bu dosya, PostgreSQL’in istemci kimlik doğrulamasını kontrol eder. Hangi kullanıcıların hangi veritabanlarına hangi IP adreslerinden hangi kimlik doğrulama yöntemiyle bağlanabileceğini belirler. Bu dosya, postgresql.conf ile aynı dizinde bulunur.
sudo nano /etc/postgresql/14/main/pg_hba.conf
Dosyanın sonuna, uzaktan erişime izin vermek istediğiniz kuralı eklemeniz gerekir. İşte bazı yaygın örnekler:
- Belirli bir IP adresinden belirli bir kullanıcıya/veritabanına izin verme (şifre ile):
host mydatabase myuser 192.168.1.10/32 md5
Bu kural, myuser kullanıcısının 192.168.1.10 IP adresinden mydatabase veritabanına md5 (şifre) kimlik doğrulaması ile bağlanmasına izin verir.
host all all 192.168.1.0/24 md5
Bu kural, 192.168.1.0/24 ağındaki tüm IP adreslerinden tüm kullanıcılara tüm veritabanlarına md5 kimlik doğrulaması ile bağlanmasına izin verir. Güvenlik açısından, all yerine belirli veritabanı ve kullanıcı adları belirtmek daha iyidir.
host all all 0.0.0.0/0 md5
Bu kural, dünyanın her yerinden herkesin şifre ile bağlanmasına izin verir. Üretim ortamlarında kesinlikle kaçınılması gereken bir ayardır.
md5 kimlik doğrulama yöntemi, şifrenin MD5 hash’i ile doğrulanmasını sağlar. Daha güvenli yöntemler arasında scram-sha-256 bulunur, ancak istemcinizin bu yöntemi desteklemesi gerekir.
Değişiklikleri kaydedin ve dosyayı kapatın.
Güvenlik Duvarı Ayarları (UFW)
Ubuntu’da UFW (Uncomplicated Firewall) etkinse, PostgreSQL’in varsayılan portu olan 5432’ye gelen bağlantılara izin vermeniz gerekir.
sudo ufw allow 5432/tcp
Eğer sadece belirli bir IP adresinden bağlantıya izin vermek isterseniz:
sudo ufw allow from 192.168.1.10 to any port 5432
Güvenlik duvarı değişikliklerini etkinleştirmek için:
sudo ufw enable
veya zaten etkinse:
sudo ufw reload
Güvenlik duvarı durumunu kontrol etmek için:
sudo ufw status
Servisi Yeniden Başlatma
postgresql.conf ve pg_hba.conf dosyalarında yaptığınız değişikliklerin etkili olması için PostgreSQL servisini yeniden başlatmanız gerekir:
sudo systemctl restart postgresql
Artık yapılandırdığınız IP adreslerinden ve kullanıcılarla PostgreSQL veritabanınıza uzaktan bağlanabilmelisiniz.
PostgreSQL Güvenliği İçin İpuçları
Veritabanı güvenliği, herhangi bir uygulamanın kritik bir bileşenidir. PostgreSQL kurulumunuzu güvence altına almak için aşağıdaki ipuçlarını göz önünde bulundurun:
- Güçlü Şifreler Kullanın: Tüm veritabanı kullanıcıları için uzun, karmaşık ve benzersiz şifreler kullanın. Şifrelerinizi düzenli olarak değiştirin.
- En Az Ayrıcalık Prensibi: Kullanıcılara veya uygulamalara yalnızca ihtiyaç duydukları minimum yetkileri verin.
postgressüper kullanıcısını sadece yönetim görevleri için kullanın ve uygulamalarınız için ayrı, daha az yetkili kullanıcılar oluşturun. - Uzaktan Erişimi Kısıtlayın:
pg_hba.confdosyasında sadece güvenilir IP adreslerinden veya ağlardan bağlantılara izin verin.0.0.0.0/0gibi geniş IP aralıklarından kaçının. - Güvenlik Duvarı Kullanın: Sunucunuzun güvenlik duvarını (UFW gibi) kullanarak PostgreSQL portu (5432) üzerindeki trafiği sadece izin verilen kaynak IP adreslerine sınırlayın.
- SSL/TLS Kullanın: Uzaktan bağlantılar için veri trafiğini şifrelemek amacıyla SSL/TLS kullanın. Bu,
postgresql.confdosyasındassl = onayarı ile etkinleştirilebilir ve uygun sertifikaların yapılandırılmasını gerektirir. - Düzenli Yedeklemeler: Veri kaybını önlemek için veritabanınızın düzenli yedeklerini alın ve bu yedekleri güvenli bir yerde saklayın. Yedekleme ve geri yükleme süreçlerini test edin.
- Güncellemeleri Takip Edin: PostgreSQL ve Ubuntu işletim sistemi için güvenlik yamalarını ve güncellemelerini düzenli olarak uygulayın.
- Logları İzleyin: PostgreSQL loglarını (genellikle
/var/log/postgresql/altında bulunur) düzenli olarak izleyerek şüpheli aktiviteleri veya hataları tespit edin.
PostgreSQL Yedekleme ve Geri Yükleme
Veri kaybı her zaman bir risktir. Bu nedenle, düzenli yedeklemeler almak ve bir felaket durumunda veritabanınızı geri yükleyebilmek kritik öneme sahiptir. PostgreSQL, bu işlemler için pg_dump ve psql (veya pg_restore) araçlarını sunar.
pg_dump ile Yedekleme
pg_dump aracı, bir PostgreSQL veritabanını metin formatında (SQL komutları olarak) veya özel bir arşiv formatında yedeklemek için kullanılır. Metin formatındaki yedekler, başka bir PostgreSQL sürümüne veya hatta farklı bir veritabanı sistemine taşınabilirlik açısından daha esnektir.
Belirli bir veritabanını yedekleme:
sudo -u postgres pg_dump mydatabase > mydatabase_backup.sql
Bu komut, mydatabase adlı veritabanının tüm yapısını ve verilerini mydatabase_backup.sql adlı bir dosyaya kaydeder. postgres kullanıcısı olarak çalıştığınızdan emin olun veya psql -U myuser gibi kullanıcı belirtin.
Tüm veritabanlarını yedekleme (genellikle pg_dumpall kullanılır):
sudo -u postgres pg_dumpall > all_databases_backup.sql
Bu komut, tüm veritabanlarını, rollerini ve tablo alanlarını içeren tek bir SQL dosyası oluşturur. Bu, tam bir sistem yedeklemesi için kullanışlıdır.
Sıkıştırılmış yedekleme: Büyük veritabanları için yedeklemeyi sıkıştırmak disk alanından tasarruf sağlar:
sudo -u postgres pg_dump mydatabase | gzip > mydatabase_backup.sql.gz
Geri Yükleme
Yedeklediğiniz bir SQL dosyasını geri yüklemek için, önce hedef veritabanının mevcut olması ve genellikle boş olması gerekir.
Yedekleme dosyasından geri yükleme:
- Mevcut veritabanını silin (isteğe bağlı, ancak temiz bir geri yükleme için önerilir):
- Yeni, boş bir veritabanı oluşturun:
- Yedekleme dosyasını geri yükleyin:
sudo -u postgres dropdb mydatabase
sudo -u postgres createdb mydatabase -O myuser
(-O myuser ile veritabanının sahibini belirtiyoruz)
sudo -u postgres psql -d mydatabase -f mydatabase_backup.sql
Sıkıştırılmış bir yedekleme dosyasını geri yüklemek için:
sudo -u postgres gunzip < mydatabase_backup.sql.gz | psql -d mydatabase
pg_dumpall ile alınan yedekleri geri yüklemek için, hedef sistemde PostgreSQL'in çalışıyor olması ve genellikle tüm veritabanlarını silip baştan yüklemek için kullanılır:
sudo -u postgres psql -f all_databases_backup.sql postgres
Bu komut, yedekleme dosyasındaki tüm veritabanlarını, kullanıcıları ve diğer global objeleri postgres veritabanı üzerinden geri yükler.
PostgreSQL Performans Optimizasyonu Temelleri
PostgreSQL'in performansını artırmak, özellikle büyük ve yoğun kullanılan veritabanları için hayati öneme sahiptir. İşte bazı temel optimizasyon teknikleri:
EXPLAIN ANALYZE Kullanımı
Bir sorgunun nasıl çalıştığını anlamak ve performans darboğazlarını tespit etmek için EXPLAIN ANALYZE komutunu kullanın. Bu komut, sorgu planlayıcısının bir sorguyu nasıl yürüttüğünü ve her adımın ne kadar zaman aldığını gösterir.
EXPLAIN ANALYZE SELECT * FROM products WHERE price > 500.00;
Çıktıyı inceleyerek, hangi tabloların taranması gerektiğini, hangi indekslerin kullanıldığını ve hangi işlemlerin en çok zaman aldığını görebilirsiniz.
İndeksler
Sıkça sorgulanan sütunlara indeks eklemek, arama ve sıralama işlemlerinin performansını önemli ölçüde artırır. Ancak, çok fazla indeks eklemek INSERT, UPDATE ve DELETE işlemlerini yavaşlatabilir ve disk alanı tüketimini artırabilir.
Örnek indeks oluşturma:
CREATE INDEX idx_products_price ON products (price);
Bu, products tablosundaki price sütunu üzerinde bir indeks oluşturur. WHERE price > 500.00 gibi sorgular artık bu indeksi kullanarak daha hızlı çalışacaktır.
VACUUM ve ANALYZE
PostgreSQL, MVCC (Multi-Version Concurrency Control) kullandığı için, güncellenen veya silinen satırlar hemen diskten kaldırılmaz. Bunun yerine, "dead tuples" (ölü kayıtlar) olarak işaretlenirler. Bu ölü kayıtlar, zamanla disk alanını doldurur ve sorgu performansını düşürebilir. VACUUM komutu bu ölü kayıtları temizler ve disk alanını geri kazanır.
VACUUM (VERBOSE, ANALYZE) products;
ANALYZE komutu, tablo ve indekslerin istatistiklerini toplar ve sorgu planlayıcısının daha verimli sorgu planları oluşturmasına yardımcı olur. Genellikle VACUUM ile birlikte kullanılır.
PostgreSQL'in otomatik vakum (autovacuum) süreci, bu işlemleri arka planda otomatik olarak yapar, ancak bazen manuel müdahale veya autovacuum ayarlarının ince ayarı gerekebilir.
Yapılandırma Parametreleri
postgresql.conf dosyasındaki bazı parametreler, sunucunun performansını doğrudan etkiler. Sunucunuzun donanımına ve iş yüküne göre bu ayarları optimize etmeniz önemlidir:
shared_buffers: PostgreSQL'in paylaşılan bellek alanının boyutu. Genellikle RAM'in %25'i kadar ayarlanır.work_mem: Sorgular sırasında geçici disk yazma işlemlerini azaltmak için kullanılan bellek miktarı. Büyük sıralama veya hash işlemleri için önemlidir.maintenance_work_mem: VACUUM, CREATE INDEX gibi bakım işlemleri için kullanılan bellek miktarı.wal_buffers: WAL (Write-Ahead Log) verilerinin diskten önce bellekte tutulduğu arabellek boyutu.max_connections: Aynı anda izin verilen maksimum bağlantı sayısı.
Bu parametrelerin doğru şekilde ayarlanması, PostgreSQL'in donanım kaynaklarını daha verimli kullanmasını sağlar. Ancak, yanlış ayarlar performans düşüşüne veya sistem kararsızlığına yol açabilir. Bu nedenle, değişiklik yapmadan önce iyi araştırma yapmalı ve test etmelisiniz.
PostgreSQL'i Kaldırma
Eğer PostgreSQL'i sisteminizden kaldırmak isterseniz, aşağıdaki adımları izleyebilirsiniz.
PostgreSQL Paketlerini Kaldırma
İlk olarak, PostgreSQL sunucu ve katkı paketlerini kaldırın:
sudo apt remove --purge postgresql postgresql-contrib -y
--purge seçeneği, paketlerle birlikte tüm yapılandırma dosyalarını da kaldırır.
Veri Dizinlerini Silme
PostgreSQL'in veri dizinleri (genellikle /var/lib/postgresql/ altında bulunur) paket kaldırma işlemiyle otomatik olarak silinmez. Bu dizinleri ve içindeki tüm veritabanı dosyalarını manuel olarak silmeniz gerekir:
sudo rm -rf /var/lib/postgresql/
UYARI: Bu komut tüm veritabanı verilerinizi kalıcı olarak silecektir. Bu adımı uygulamadan önce yedekleme yaptığınızdan veya verilere ihtiyacınız olmadığından kesinlikle emin olun.
PostgreSQL Kullanıcısını Silme
İşletim sistemi düzeyinde oluşturulan postgres kullanıcısını da silebilirsiniz:
sudo deluser postgres
Bu komut, postgres kullanıcısını sistemden kaldırır. Eğer kullanıcının ana dizinini de silmek isterseniz --remove-home bayrağını kullanabilirsiniz:
sudo deluser --remove-home postgres
Bu adımları tamamladığınızda, PostgreSQL sisteminizden tamamen kaldırılmış olacaktır.
Sonuç
Bu kapsamlı rehberde, PostgreSQL'i Ubuntu 22.04 işletim sistemi üzerine kurmaktan, temel veritabanı yönetimi işlemlerine, uzaktan erişim yapılandırmasından güvenlik ipuçlarına ve performans optimizasyonu temellerine kadar birçok konuyu ele aldık. PostgreSQL, esnekliği, güvenilirliği ve zengin özellik seti sayesinde hem geliştiriciler hem de sistem yöneticileri için vazgeçilmez bir araçtır. Bu rehberdeki adımları takip ederek, kendi PostgreSQL kurulumunuzu başarıyla tamamlayabilir ve uygulamalarınız için sağlam bir veritabanı altyapısı oluşturabilirsiniz.
Unutmayın ki veritabanı yönetimi sürekli bir öğrenme sürecidir. Güvenlik, performans ve yedekleme stratejileri gibi konuları düzenli olarak gözden geçirmek, veritabanınızın sağlıklı ve verimli çalışmasını sağlamak için kritik öneme sahiptir. Daha fazla bilgi ve gelişmiş konular için PostgreSQL'in resmi belgelerini ve aktif topluluk forumlarını takip etmeniz şiddetle tavsiye edilir.