Takip et

PostgreSQL’i Ubuntu 22.04 Üzerine Kurulumu ve Kullanımı: Kapsamlı Bir Rehber

PostgreSQL’i Ubuntu 22.04 Üzerine Kurulumu ve Kullanımı: Kapsamlı Bir Rehber Veritabanları, modern yazılım uygulamalarının temelini oluştur

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 sudo komutunu 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
  • Durdurma: PostgreSQL servisini durdurur.
  • sudo systemctl stop postgresql
  • Yeniden Başlatma: Servisi durdurur ve tekrar başlatır. Yapılandırma dosyalarında değişiklik yaptığınızda genellikle bu komutu kullanmanız gerekir.
  • sudo systemctl restart postgresql
  • Durum Kontrolü: Servisin mevcut durumunu gösterir.
  • systemctl status postgresql
  • Otomatik Başlatmayı Etkinleştirme: Sistem başlangıcında otomatik olarak başlamasını sağlar (genellikle kurulumda otomatik etkinleşir).
  • sudo systemctl enable postgresql
  • Otomatik Başlatmayı Devre Dışı Bırakma: Sistem başlangıcında otomatik olarak başlamasını engeller.
  • 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? Genellikle n)
  • Shall the new role create databases? (y/n) (Veritabanı oluşturabilsin mi? İhtiyaca göre y veya n)
  • Shall the new role create new roles? (y/n) (Yeni rol oluşturabilsin mi? Genellikle n)

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//main/postgresql.conf yolunda bulunur. Ubuntu 22.04 için bu genellikle /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.

  • Belirli bir IP aralığından tüm kullanıcılara/veritabanlarına izin verme (şifre ile):
  • 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.

  • Tüm IP adreslerinden tüm kullanıcılara/veritabanlarına izin verme (şifre ile – GÜVENLİ DEĞİLDİR, sadece test ortamları için):
  • 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. postgres sü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.conf dosyasında sadece güvenilir IP adreslerinden veya ağlardan bağlantılara izin verin. 0.0.0.0/0 gibi 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.conf dosyasında ssl = on ayarı 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:

  1. Mevcut veritabanını silin (isteğe bağlı, ancak temiz bir geri yükleme için önerilir):
  2. sudo -u postgres dropdb mydatabase
  3. Yeni, boş bir veritabanı oluşturun:
  4. sudo -u postgres createdb mydatabase -O myuser

    (-O myuser ile veritabanının sahibini belirtiyoruz)

  5. Yedekleme dosyasını geri yükleyin:
  6. 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.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.