Ubuntu 12.04 Üzerine PostgreSQL Kurulumu ve Kullanımı
Günümüzün veri odaklı dünyasında, güçlü ve güvenilir bir veritabanı yönetim sistemine sahip olmak, hemen hemen her yazılım projesi için kritik öneme sahiptir. PostgreSQL, açık kaynaklı ve nesne-ilişkisel bir veritabanı yönetim sistemi olarak, performansı, sağlamlığı, esnekliği ve gelişmiş özellikleriyle dünya genelinde milyonlarca geliştirici ve kuruluş tarafından tercih edilmektedir. Bu makalede, uzun süreli destek (LTS) sürümü olan Ubuntu 12.04 (Precise Pangolin) işletim sistemi üzerine PostgreSQL’in nasıl kurulacağını ve temel düzeyde nasıl kullanılacağını adım adım ayrıntılı bir şekilde inceleyeceğiz. Ubuntu 12.04 her ne kadar eski bir sürüm olsa da, bu makale, eski sistemlerde dahi PostgreSQL’in nasıl yönetileceğine dair temel bir anlayış sağlamayı hedeflemektedir.
PostgreSQL Nedir ve Neden Tercih Edilir?
PostgreSQL, 30 yılı aşkın bir süredir aktif olarak geliştirilen, güçlü ve olgun bir veritabanı sistemidir. SQL standardına tam uyumluluğu, genişletilebilirliği, veri bütünlüğüne verdiği önem ve karmaşık sorguları işleme yeteneği ile öne çıkar. ACID (Atomicity, Consistency, Isolation, Durability) prensiplerine tam uyumlu olması, işlem güvenilirliğini garanti eder. Ayrıca, JSON, XML, HSTORE gibi çeşitli veri tiplerini desteklemesi ve coğrafi veri (PostGIS uzantısı ile) işleme yetenekleri sayesinde modern uygulamaların ihtiyaçlarına cevap verebilmektedir. Açık kaynak lisansı sayesinde lisans maliyeti olmaması, işletmeler için cazip bir seçenek haline getirir.
Ön Gereksinimler
Bu makaledeki adımları uygulayabilmek için aşağıdaki ön gereksinimlere sahip olmanız gerekmektedir:
* Ubuntu 12.04 LTS İşletim Sistemi: Çalışır durumda bir Ubuntu 12.04 sunucusu veya masaüstü kurulumu.
* Sudo Yetkileri: Kurulum ve yapılandırma işlemleri için sudo yetkilerine sahip bir kullanıcı hesabı.
* İnternet Bağlantısı: PostgreSQL paketlerini indirmek için aktif bir internet bağlantısı.
Ubuntu 12.04’ün varsayılan depolarında genellikle PostgreSQL 9.1 sürümü bulunur. Bu makaledeki komutlar ve yapılandırma örnekleri bu sürüme göre verilmiştir.
PostgreSQL Kurulumu
PostgreSQL’i Ubuntu 12.04 üzerine kurmak oldukça basittir. Ubuntu’nun apt paket yönetim sistemi sayesinde gerekli tüm paketleri kolayca yükleyebiliriz.
Adım 1: Paket Listelerini Güncelleme
Öncelikle, sisteminizdeki paket listelerini güncelleyerek en son paket bilgilerini edindiğinizden emin olun. Bu, herhangi bir kurulum hatasını önlemek için iyi bir uygulamadır.
Komut:
sudo apt-get update
Adım 2: PostgreSQL Server ve Client Paketlerini Kurma
Paket listeleri güncellendikten sonra, PostgreSQL sunucusunu ve istemci araçlarını kurabiliriz. postgresql paketi veritabanı sunucusunu içerirken, postgresql-contrib paketi ek araçlar ve işlevsellik sağlar (örneğin, pg_stat_statements gibi uzantılar).
Komut:
sudo apt-get install postgresql postgresql-contrib
Kurulum işlemi sırasında, sistem sizden onay isteyebilir. E veya Y tuşuna basarak devam edin. Kurulum tamamlandığında, PostgreSQL servisi otomatik olarak başlayacak ve sistem başlangıcında da çalışacak şekilde ayarlanacaktır.
Adım 3: Kurulumu Doğrulama
PostgreSQL servisinin başarıyla çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
Komut:
sudo service postgresql status
Eğer servis çalışıyorsa, çıktıda genellikle “running” veya benzeri bir ifade göreceksiniz. Örneğin:
Örnek Çıktı:
9.1/main (port 5432): online
Bu çıktı, PostgreSQL sunucusunun 5432 numaralı varsayılan portta çalıştığını gösterir.
Temel Yapılandırma
PostgreSQL kurulumundan sonra, bazı temel yapılandırmalar yapmanız gerekebilir. Özellikle, varsayılan postgres kullanıcısının şifresini ayarlamak ve yeni veritabanı kullanıcıları/veritabanları oluşturmak önemlidir.
PostgreSQL Kullanıcıları ve Rolleri
PostgreSQL, işletim sistemi kullanıcılarından ayrı bir kullanıcı sistemi kullanır. Kurulum sırasında, postgres adında bir veritabanı süper kullanıcısı oluşturulur. Bu kullanıcı, aynı zamanda Ubuntu sisteminde de postgres adında bir kullanıcıya karşılık gelir.
Adım 1: postgres Kullanıcısının Şifresini Ayarlama
Güvenlik amacıyla, postgres veritabanı kullanıcısı için bir şifre belirlemeniz şiddetle tavsiye edilir. Bunu yapmak için öncelikle postgres işletim sistemi kullanıcısına geçiş yapmanız gerekir:
Komut:
sudo -i -u postgres
Şimdi, psql komut satırı istemcisini kullanarak PostgreSQL’e bağlanın:
Komut:
psql
psql istemcisine girdikten sonra, postgres kullanıcısının şifresini ayarlamak için aşağıdaki komutu çalıştırın:
Komut:
\password postgres
Sistem sizden yeni şifreyi iki kez girmenizi isteyecektir. Şifreyi ayarladıktan sonra psql istemcisinden çıkmak için \q yazıp Enter tuşuna basın.
Komut:
\q
Ardından, postgres işletim sistemi kullanıcısından çıkmak için exit yazıp Enter tuşuna basın:
Komut:
exit
Adım 2: Yeni Bir Veritabanı Kullanıcısı Oluşturma
Uygulamalarınız veya diğer kullanıcılar için doğrudan postgres süper kullanıcısını kullanmak yerine, özel yetkilere sahip yeni veritabanı kullanıcıları oluşturmak en iyi güvenlik uygulamasıdır.
Önceki adımda olduğu gibi, postgres işletim sistemi kullanıcısına geçiş yapın:
Komut:
sudo -i -u postgres
Ardızdan, createuser komutunu kullanarak yeni bir kullanıcı oluşturun. Örneğin, myuser adında bir kullanıcı oluşturalım:
Komut:
createuser –interactive
Bu komut size birkaç soru soracaktır:
Enter name of role to add: myuser
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create new roles? (y/n) n
Bu örnekte, myuser adında, veritabanı oluşturma yetkisi olan ancak süper kullanıcı olmayan veya rol oluşturamayan bir kullanıcı oluşturduk.
myuser için bir şifre belirlemek amacıyla psql‘e bağlanın:
Komut:
psql
psql içinde aşağıdaki komutu çalıştırın:
Komut:
ALTER USER myuser WITH ENCRYPTED PASSWORD ‘your_secure_password’;
your_secure_password yerine kendi güvenli şifrenizi yazın. İşlem tamamlandığında \q ile psql‘den, exit ile postgres kullanıcısından çıkın.
Adım 3: Yeni Bir Veritabanı Oluşturma
Her uygulamanın veya projenin genellikle kendi özel veritabanına sahip olması istenir. createdb komutunu kullanarak yeni bir veritabanı oluşturabiliriz. Örneğin, mydatabase adında bir veritabanı oluşturalım ve sahibini myuser yapalım:
Komut:
sudo -i -u postgres
createdb -O myuser mydatabase
exit
Bu komut, mydatabase adında bir veritabanı oluşturur ve bu veritabanının sahibini myuser olarak atar.
PostgreSQL’e Bağlanma
PostgreSQL’e bağlanmanın birkaç yolu vardır. En yaygın olanı, komut satırı aracı psql‘dir.
psql ile Bağlanma
psql aracı, PostgreSQL veritabanlarıyla etkileşim kurmak için güçlü bir komut satırı istemcisidir.
Varsayılan Veritabanına ve Kullanıcıya Bağlanma:
Eğer postgres işletim sistemi kullanıcısı olarak bağlanıyorsanız ve postgres veritabanına bağlanmak istiyorsanız:
Komut:
sudo -i -u postgres
psql
Belirli Bir Veritabanına ve Kullanıcıya Bağlanma:
Daha önce oluşturduğumuz myuser kullanıcısı ve mydatabase veritabanına bağlanmak için:
Komut:
psql -U myuser -d mydatabase
Sistem sizden myuser kullanıcısının şifresini isteyecektir. Şifreyi girdikten sonra mydatabase veritabanına bağlanmış olacaksınız.
psql istemcisi içindeyken kullanabileceğiniz bazı temel komutlar:
* \l: Tüm veritabanlarını listeler.
* \dt: Mevcut veritabanındaki tabloları listeler.
* \du: Tüm veritabanı kullanıcılarını (rollerini) listeler.
* \c [veritabanı_adı]: Başka bir veritabanına geçiş yapar.
* \d [tablo_adı]: Bir tablonun yapısını (sütunları, tipleri vb.) gösterir.
* \q: psql istemcisinden çıkar.
Veritabanı İşlemleri (CRUD Temelleri)
Bir veritabanı oluşturduktan ve ona bağlandıktan sonra, veritabanı üzerinde temel CRUD (Create, Read, Update, Delete) işlemlerini gerçekleştirebiliriz.
myuser ve mydatabase ile psql‘e bağlı olduğunuzu varsayalım:
Komut:
psql -U myuser -d mydatabase
Adım 1: Tablo Oluşturma (CREATE)
Örnek olarak, urunler adında basit bir tablo oluşturalım:
SQL Komutu:
CREATE TABLE urunler (
id SERIAL PRIMARY KEY,
ad VARCHAR(100) NOT NULL,
fiyat DECIMAL(10, 2) NOT NULL,
stok INT DEFAULT 0
);
Bu komut, id (otomatik artan birincil anahtar), ad, fiyat ve stok sütunlarına sahip bir urunler tablosu oluşturur.
Tablonun oluştuğunu \dt komutu ile kontrol edebilirsiniz:
Komut:
\dt
Adım 2: Veri Ekleme (INSERT)
urunler tablosuna birkaç kayıt ekleyelim:
SQL Komutu:
INSERT INTO urunler (ad, fiyat, stok) VALUES
(‘Laptop’, 1200.00, 50),
(‘Klavye’, 75.50, 150),
(‘Fare’, 25.00, 200);
Adım 3: Veri Okuma (SELECT)
Tablodaki verileri okumak için SELECT komutunu kullanırız:
Tüm verileri seçme:
SQL Komutu:
SELECT * FROM urunler;
Örnek Çıktı:
id | ad | fiyat | stok
—-+——–+——–+——
1 | Laptop | 1200.00| 50
2 | Klavye | 75.50 | 150
3 | Fare | 25.00 | 200
(3 rows)
Belirli bir koşula göre veri seçme:
SQL Komutu:
SELECT ad, fiyat FROM urunler WHERE stok > 100;
Örnek Çıktı:
ad | fiyat
——-+——-
Klavye | 75.50
Fare | 25.00
(2 rows)
Adım 4: Veri Güncelleme (UPDATE)
Mevcut bir kaydın verilerini güncellemek için UPDATE komutunu kullanırız:
Örneğin, “Laptop” ürününün fiyatını güncelleyelim:
SQL Komutu:
UPDATE urunler SET fiyat = 1150.00 WHERE ad = ‘Laptop’;
Güncellemenin başarılı olduğunu doğrulamak için tekrar SELECT yapabilirsiniz:
SQL Komutu:
SELECT * FROM urunler WHERE ad = ‘Laptop’;
Adım 5: Veri Silme (DELETE)
Tablodan kayıt silmek için DELETE komutunu kullanırız:
Örneğin, stoğu 50’den az olan tüm ürünleri silelim (bu örnekte Laptop silinecek):
SQL Komutu:
DELETE FROM urunler WHERE stok < 100;
Silme işlemini doğrulamak için tüm ürünleri tekrar listeleyebilirsiniz:
SQL Komutu:
SELECT * FROM urunler;
Kullanıcı ve Rol Yönetimi
PostgreSQL’de kullanıcılar aslında “roller” olarak adlandırılır. Bir rol, bir kullanıcı veya bir grup kullanıcı olabilir. Rol yönetimi, veritabanı güvenliği için kritik öneme sahiptir.
Yeni Rol (Kullanıcı) Oluşturma
Daha önce createuser komutunu kullanmıştık. psql içinde de CREATE ROLE komutuyla rol oluşturabiliriz:
Komut:
sudo -i -u postgres
psql
SQL Komutu:
CREATE ROLE yeni_kullanici WITH LOGIN PASSWORD ‘sifre123’;
CREATE DATABASE yeni_db OWNER yeni_kullanici;
\q
exit
Bu komutlar, yeni_kullanici adında şifresi sifre123 olan bir kullanıcı oluşturur ve bu kullanıcının sahibi olduğu yeni_db adında bir veritabanı yaratır.
Yetki Verme (GRANT)
Bir kullanıcıya belirli bir veritabanı, tablo veya diğer veritabanı objeleri üzerinde yetki vermek için GRANT komutu kullanılır.
psql‘e postgres kullanıcısı olarak bağlıyken:
SQL Komutu:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO yeni_kullanici;
GRANT ALL PRIVILEGES ON TABLE urunler TO yeni_kullanici;
Bu komutlar, yeni_kullanici‘ya mydatabase üzerinde ve urunler tablosu üzerinde tüm yetkileri verir. Belirli yetkiler de verilebilir (örneğin, SELECT, INSERT, UPDATE, DELETE).
Yetki Kaldırma (REVOKE)
Bir kullanıcıdan yetkileri geri almak için REVOKE komutu kullanılır:
SQL Komutu:
REVOKE INSERT ON TABLE urunler FROM yeni_kullanici;
Bu komut, yeni_kullanici‘nın urunler tablosuna veri ekleme yetkisini geri alır.
Rol Silme
Bir rolü silmek için önce o rolün sahip olduğu tüm veritabanlarını veya objeleri başka bir role aktarmanız veya silmeniz gerekir. Ardından DROP ROLE komutunu kullanabilirsiniz:
SQL Komutu:
DROP ROLE yeni_kullanici;
Güvenlik Hususları
PostgreSQL kurulumunuzu güvence altına almak çok önemlidir. İşte dikkat etmeniz gereken bazı temel güvenlik noktaları:
pg_hba.conf Yapılandırması
pg_hba.conf dosyası, PostgreSQL’e kimlerin, hangi veritabanlarına, hangi kullanıcılarla ve hangi kimlik doğrulama yöntemiyle bağlanabileceğini belirleyen ana yapılandırma dosyasıdır. Bu dosya genellikle /etc/postgresql/9.1/main/pg_hba.conf yolunda bulunur.
Dosyayı düzenlemek için bir metin düzenleyici kullanın:
Komut:
sudo nano /etc/postgresql/9.1/main/pg_hba.conf
Dosyanın içeriği aşağıdaki gibi satırlar içerir:
Örnek pg_hba.conf satırı:
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
Açıklamalar:
* TYPE: Bağlantı türü (local Unix soketleri için, host TCP/IP bağlantıları için).
* DATABASE: Bağlanılacak veritabanı (all tüm veritabanları için).
* USER: Bağlanılacak kullanıcı (all tüm kullanıcılar için).
* ADDRESS: Bağlantının geldiği IP adresi veya ağ aralığı.
* METHOD: Kimlik doğrulama yöntemi (peer, ident, md5, trust, password vb.).
Önemli Kimlik Doğrulama Yöntemleri:
* peer: Unix soket bağlantıları için, işletim sistemi kullanıcısı veritabanı kullanıcısıyla aynıysa bağlantıya izin verir. Güvenlidir.
* ident: Eski bir kimlik doğrulama yöntemi, peer‘a benzer ancak TCP/IP için. Genellikle güvenli kabul edilmez.
* md5: Şifre tabanlı kimlik doğrulama. Şifreler MD5 hash’i olarak gönderilir. Uzak bağlantılar için önerilir.
* password: Şifre tabanlı kimlik doğrulama. Şifreler açık metin olarak gönderilir. ASLA KULLANILMAMALIDIR.
* trust: Herkese şifre sormadan bağlantıya izin verir. ASLA ÜRETİM ORTAMINDA KULLANILMAMALIDIR.
Uzak Bağlantılara İzin Verme:
Eğer PostgreSQL sunucunuza başka bir makineden bağlanmak istiyorsanız, pg_hba.conf dosyasında buna izin veren bir satır eklemeniz gerekir. Örneğin, 192.168.1.0/24 ağındaki tüm makinelerden md5 şifre doğrulamasıyla bağlanmaya izin vermek için:
pg_hba.conf‘a ekleyin:
host all all 192.168.1.0/24 md5
Tüm IP adreslerinden (dikkatli olun!) bağlanmaya izin vermek için:
host all all 0.0.0.0/0 md5
Değişiklikleri kaydettikten sonra PostgreSQL servisini yeniden başlatmanız gerekir:
Komut:
sudo service postgresql restart
postgresql.conf Yapılandırması
postgresql.conf dosyası, PostgreSQL sunucusunun çalışma zamanı davranışını kontrol eden ana yapılandırma dosyasıdır. Bu dosya genellikle /etc/postgresql/9.1/main/postgresql.conf yolunda bulunur.
Komut:
sudo nano /etc/postgresql/9.1/main/postgresql.conf
Uzak Bağlantılar İçin listen_addresses:
Eğer uzak bağlantılara izin verdiyseniz pg_hba.conf‘ta, aynı zamanda postgresql.conf içinde listen_addresses ayarını da yapmanız gerekir. Varsayılan olarak, PostgreSQL yalnızca localhost‘tan gelen bağlantıları dinler.
postgresql.conf içinde şu satırı bulun ve düzenleyin:
#listen_addresses = ‘localhost’ # what IP address(es) to listen on;
Satırın başındaki # işaretini kaldırın ve localhost yerine * (tüm arayüzleri dinle) veya belirli bir IP adresi yazın:
listen_addresses = ‘*’ # listen on all IP interfaces
Değişiklikleri kaydettikten sonra PostgreSQL servisini yeniden başlatın:
Komut:
sudo service postgresql restart
Güçlü Şifreler Kullanın
Tüm veritabanı kullanıcılarınız için güçlü, karmaşık şifreler kullanın. Asla varsayılan şifreleri bırakmayın.
Güvenlik Duvarı (UFW) Yapılandırması
Ubuntu’da UFW (Uncomplicated Firewall) kullanarak sunucunuza gelen bağlantıları kısıtlayabilirsiniz. PostgreSQL’in varsayılan portu 5432’dir. Yalnızca belirli IP adreslerinden veya ağlardan bu porta erişime izin vermelisiniz.
Örneğin, sadece 192.168.1.100 IP adresinden 5432 portuna erişime izin vermek için:
Komut:
sudo ufw allow from 192.168.1.100 to any port 5432
sudo ufw enable
Eğer tüm güvenilen IP’lerinizi belirleyemiyorsanız ve sunucunuz internete açık ise, sadece uygulamanızın çalıştığı sunucu IP’sine veya VPN üzerinden erişime izin vermek en güvenli yaklaşımdır.
Yedekleme ve Geri Yükleme
Veri kaybını önlemek için düzenli yedeklemeler almak hayati önem taşır. PostgreSQL, yedekleme ve geri yükleme için güçlü araçlar sunar.
Veritabanı Yedekleme (pg_dump)
pg_dump aracı, bir PostgreSQL veritabanını SQL komutları içeren bir dosyaya yedeklemek için kullanılır.
Tek bir veritabanını yedekleme:
Komut:
sudo -i -u postgres
pg_dump mydatabase > /path/to/backup/mydatabase_backup.sql
exit
mydatabase yerine yedeklemek istediğiniz veritabanının adını, /path/to/backup/ yerine yedek dosyasını kaydetmek istediğiniz yolu yazın.
Tüm veritabanlarını yedekleme (genellikle pg_dumpall ile yapılır):
Komut:
sudo -i -u postgres
pg_dumpall > /path/to/backup/all_databases_backup.sql
exit
Bu komut, tüm veritabanlarını, rol tanımlarını ve tablo alanlarını içeren tek bir SQL dosyası oluşturur.
Veritabanı Geri Yükleme
Yedeklenen bir veritabanını geri yüklemek için psql komutunu kullanırız. Geri yüklemeden önce genellikle boş bir veritabanı oluşturmanız gerekir.
1. Boş bir veritabanı oluşturun (örneğin, restore_db):
Komut:
sudo -i -u postgres
createdb restore_db
exit
2. Yedek dosyasını bu boş veritabanına geri yükleyin:
Komut:
sudo -i -u postgres
psql -d restore_db < /path/to/backup/mydatabase_backup.sql
exit
pg_dumpall ile alınan bir yedeği geri yüklemek için:
Komut:
sudo -i -u postgres
psql -f /path/to/backup/all_databases_backup.sql postgres
exit
Burada postgres veritabanına bağlanılır çünkü pg_dumpall yedeği genellikle rol ve veritabanı oluşturma komutlarını içerir ve bunlar tüm veritabanları için geçerlidir.
Sık Karşılaşılan Sorunlar ve Çözümleri
* Bağlantı Reddedildi (Connection Refused):
* PostgreSQL servisinin çalışıp çalışmadığını kontrol edin: sudo service postgresql status
postgresql.conf dosyasındaki listen_addresses ayarının doğru olduğundan emin olun ( veya belirli IP).
* pg_hba.conf dosyasındaki kuralların bağlantınıza izin verdiğinden emin olun.
* Güvenlik duvarınızın (UFW) 5432 portuna erişimi engellemediğinden emin olun.
* Kimlik Doğrulama Hatası (Authentication Failed):
* Kullanıcı adınızın ve şifrenizin doğru olduğundan emin olun.
* pg_hba.conf dosyasındaki kimlik doğrulama yönteminin doğru olduğundan emin olun (örneğin, md5 kullanıyorsanız doğru şifre girmeniz gerekir).
* psql ile bağlanırken doğru kullanıcıyı (-U) ve veritabanını (-d) belirttiğinizden emin olun.
* PostgreSQL Servisi Başlamıyor:
* Hata loglarını kontrol edin. Log dosyaları genellikle /var/log/postgresql/ dizininde bulunur (örneğin, postgresql-9.1-main.log).
* Yapılandırma dosyalarınızda (postgresql.conf, pg_hba.conf) sözdizimi hatası olup olmadığını kontrol edin.
* psql veya createuser gibi komutlar bulunamıyor:
* PATH değişkeninizin doğru olduğundan emin olun.
* sudo -i -u postgres komutuyla postgres işletim sistemi kullanıcısına geçiş yaptığınızdan emin olun, çünkü bu komutlar genellikle o kullanıcının PATH’inde bulunur.
Sonuç
Bu kapsamlı makalede, Ubuntu 12.04 LTS işletim sistemi üzerine PostgreSQL veritabanı yönetim sisteminin nasıl kurulacağını ve temel düzeyde nasıl kullanılacağını öğrendiniz. Kurulum adımlarından başlayarak, veritabanı ve kullanıcı oluşturma, temel CRUD işlemleri, güvenlik yapılandırmaları ve yedekleme/geri yükleme süreçlerine kadar birçok önemli konuyu ele aldık. PostgreSQL’in sağlamlığı ve esnekliği, onu çeşitli projeler için mükemmel bir seçim haline getirmektedir. Bu bilgilerle, kendi PostgreSQL sunucunuzu kurabilir ve yönetmeye başlayabilirsiniz. İleri düzey kullanım ve optimizasyon konuları için PostgreSQL’in zengin dokümantasyonunu keşfetmeye devam etmeniz önerilir. Veritabanı yönetiminde iyi güvenlik uygulamalarını takip etmek ve düzenli yedeklemeler almak, veri bütünlüğünüz ve sisteminizin güvenliği için kritik öneme sahiptir.