Yazılım

PostgreSQL Nedir, Nasıl Kurulur? MySQL ile Farkı

Talha Aslan 16 dakikalık okuma 5 görüntülenme

PostgreSQL nedir?

PostgreSQL, verileri tablolar halinde saklayan ve SQL diliyle sorgulayan açık kaynaklı bir ilişkisel veritabanı yönetim sistemidir. JSONB veri tipi, eklentilerle genişleyen yapısı ve SQL standardına yüksek uyumu sayesinde küçük web projelerinde de karmaşık uygulamalarda da ekiplerin ilk tercihlerinden biridir.

Bu yazı, PostgreSQL nedir sorusunu iki okur için cevaplar. Birincisi web sitesi, e-ticaret ya da yazılım projesinde veritabanı kararı vermesi gereken kişidir. İkincisi kendi VPS sunucusunu yöneten ve adım adım komut isteyen kişidir.

Biz dijital pazarlama ve web ekibiyiz, hosting firması değiliz. Bu nedenle anlatım resmi PostgreSQL ve Ubuntu dokümanlarına dayanır. Sürüm numarası yerine "güncel kararlı sürüm" diyoruz, çünkü rakamlar kısa sürede eskir.

Yazının sonunda ayrıca dürüst bir bölüm var: hangi adımları kendiniz yapmamalı, hangilerini hosting sağlayıcınıza bırakmalısınız. Veritabanında yapılan bir hata, sitenizin tamamını durdurabilir.

PostgreSQL nedir ve bir ilişkisel veritabanı ne iş yapar?

İlişkisel veritabanı, bilgiyi satır ve sütunlardan oluşan tablolarda tutar. Örneğin bir e-ticaret sitesinde müşteriler, ürünler ve siparişler ayrı tablolardır. Tablolar birbirine anahtarlarla bağlıdır, böylece bir siparişin hangi müşteriye ait olduğunu sorgu ile bulursunuz.

PostgreSQL bu işi bir sunucu programı olarak yapar. Uygulamanız, yani web siteniz ya da API, veritabanıyla ağ ya da yerel soket üzerinden konuşur. Sorguyu gönderir, sonucu alır. Veritabanı programı kendi sunucu sürecinde çalışır ve verileri diskte kendi düzeninde tutar.

Kısacası PostgreSQL nedir sorusunun pratik cevabı şudur: sitenizin hafızasıdır. Ürün listesi, kullanıcı hesabı, sepet ve sipariş geçmişi orada durur. Veritabanı yavaşlarsa sayfalar da yavaşlar, veritabanı yanıt vermezse site hata verir.

Veritabanıyla konuşmak için SQL dilini kullanırsınız. SQL'e yeniyseniz önce sıfırdan ileri seviyeye SQL öğrenme rehberimize bakın. Mülakat tarzı sorgu senaryoları için SQL mülakat sorularını da inceleyebilirsiniz.

PostgreSQL'in güçlü yönleri nelerdir?

PostgreSQL'i öne çıkaran birkaç özellik var. Hepsini resmi dokümanda doğrulayabilirsiniz. Üstelik bu özelliklerin çoğu ek lisans ücreti olmadan gelir.

  • SQL standardına yüksek uyum: Dokümana göre SQL:2023 çekirdeği için gereken 177 zorunlu özelliğin en az 170 tanesini karşılar.
  • JSONB veri tipi: JSON belgelerini ikili biçimde saklar ve dizinlemenize izin verir.
  • Genişletilebilirlik: Eklentiler, kullanıcı tanımlı fonksiyonlar ve farklı işlem dilleri ile yeteneklerini artırırsınız.
  • Dış veri sarmalayıcıları: Başka veri kaynaklarını sanki tabloymuş gibi sorgulayabilirsiniz.
  • Düzenli sürüm politikası: Her ana sürüm için yaklaşık beş yıl güvenlik ve hata düzeltmesi gelir.

Bu listeyi okurken bir noktayı unutmayın. "Güçlü yön" her projede avantaj anlamına gelmez. Basit bir kurumsal site için bu özelliklerin çoğuna hiç ihtiyaç duymazsınız. Ancak proje büyüdüğünde bu esneklik işinize yarar.

Standart uyumu konusunda resmi sayfa şu notu da düşüyor: Hiçbir güncel veritabanı sistemi çekirdek SQL:2023 standardına tam uyum iddia etmiyor. Yani rakamı abartmadan, "yüksek uyum" demek doğru olur. Kaynak: PostgreSQL SQL uyumluluğu sayfası.

JSONB nedir ve JSON veri tipinden farkı nedir?

PostgreSQL iki JSON tipi sunar: json ve jsonb. json tipi girdiğiniz metni olduğu gibi saklar. jsonb ise belgeyi ayrıştırıp ikili biçimde tutar. Bu yüzden jsonb sorgularda daha hızlıdır, girişte ise dönüştürme nedeniyle biraz yavaştır.

Özellikjsonjsonb
Saklama biçimiGirdi metninin birebir kopyasıİkili biçim
Boşluk ve anahtar sırasıSaklarSaklamaz
Yinelenen anahtarHepsini tutarYalnız son değeri tutar
Dizin desteğiYokGIN dizini var
Sorgu hızıHer seferinde yeniden ayrıştırırYeniden ayrıştırma gerekmez

Dokümanın önerisi nettir: Çok özel bir ihtiyacınız yoksa JSON verisini jsonb olarak saklayın. Anahtar sırasını korumak gibi eski varsayımlar bunun istisnasıdır.

Aşağıdaki örnek, jsonb sütunu için GIN dizini oluşturur ve içerme operatörü ile sorgular. Tablo ve sütun adları örnektir.

CREATE TABLE siparis (id serial PRIMARY KEY, detay jsonb);
CREATE INDEX siparis_detay_gin ON siparis USING GIN (detay);
SELECT detay->>'musteri' FROM siparis WHERE detay @> '{"odeme": "kart"}';

Burada ->> operatörü değeri metin olarak döndürür, @> operatörü ise belgenin verilen parçayı içerip içermediğine bakar. Kaynak: PostgreSQL JSON tipleri dokümanı.

PostgreSQL genişletilebilirliği ne demek?

PostgreSQL'i bir ürün olarak değil, bir platform olarak düşünebilirsiniz. Çekirdeği küçük tutar, ek yetenekleri eklentilerle getirirsiniz. Eklentiyi veritabanınıza CREATE EXTENSION komutuyla yüklersiniz. Resmi özellik tablosunda "trusted extensions" ayrı bir başlıktır.

Fonksiyonlar, tetikleyiciler ve saklı yordamlar da bu esnekliğin parçasıdır. PL/pgSQL, PL/Perl ve PL/Python gibi işlem dilleriyle veritabanı içinde mantık yazabilirsiniz. Ancak her mantığı veritabanına gömmek iyi fikir değildir. Uygulama kodu ile veritabanı arasındaki sınırı bilinçli çizin.

Dış veri sarmalayıcıları ayrı bir güç sağlar. Örneğin başka bir PostgreSQL sunucusundaki tabloyu kendi sorgunuzdan okumak mümkündür. Bu özellik veri taşıma ve raporlama işlerinde işinizi kolaylaştırır.

Peki bunun pazarlama ve web projelerine faydası nedir? Dolaylı ama gerçektir. Arama, raporlama ve veri toplama gibi ihtiyaçlar büyüdükçe, ayrı bir araç kurmadan veritabanının kendi yeteneklerini kullanabilirsiniz. Bu da bakım yükünü azaltır.

PostgreSQL nedir sorusunun MySQL tarafı: ikisi pratikte nasıl ayrışır?

İkisi de açık kaynaklı, yaygın ve SQL konuşan ilişkisel veritabanlarıdır. Aralarındaki farklar çoğunlukla ayrıntıda ve ekosistemdedir. Aşağıdaki tablo, kaynağı belli ya da tartışmasız olan farkları özetler.

KonuPostgreSQLMySQL
LisansSerbest PostgreSQL lisansıTopluluk sürümü GPL, ticari seçenek ayrıca var
Varsayılan port54323306
Komut satırı istemcisipsqlmysql
JSON dizinlemejsonb sütununa doğrudan GIN diziniGenerated column ya da çok değerli dizin üzerinden
Erişim denetimipg_hba.conf dosyası ve rollerKullanıcı ve konak çiftine ait hesaplar
Genişletme yoluCREATE EXTENSION ile eklentilerEklenti ve depolama motoru mimarisi
WordPress çekirdeğiDesteklemezDestekler (MariaDB ile birlikte)

JSON satırı resmi dokümanlara dayanır. MySQL tarafında JSON sütununa doğrudan dizin koymazsınız; bunun yerine JSON ifadesinden değer çıkaran bir generated column üzerine dizin kurarsınız. InnoDB ayrıca JSON dizileri için çok değerli dizinleri destekler. Kaynak: MySQL JSON dokümanı.

MySQL ile MariaDB arasındaki farkı ve MySQL kurulumunu anlatan kardeş yazılarımızı da okuyabilirsiniz. Burada o ayrıntıları tekrar etmiyoruz.

Hangi proje için PostgreSQL, hangisi için MySQL seçmelisiniz?

PostgreSQL nedir sorusunu cevapladıktan sonra asıl soru seçimdir. Kesin bir kural yok; ancak sağlam bir karar süzgeci var. Önce projenizin hangi yazılımı çalıştırdığına bakın. Çünkü birçok hazır sistem veritabanını sizin yerinize seçer.

  • WordPress ve ona bağlı eklentiler: MySQL ya da MariaDB kullanın. Çekirdek başka bir veritabanıyla çalışmaz.
  • Laravel, Django ve benzeri çatılarla sıfırdan yazılan uygulamalar: Her iki veritabanı da çalışır, tercih size kalır.
  • Yoğun JSON verisi, karmaşık raporlama ve ileri SQL özellikleri gerektiren projeler: PostgreSQL güçlü bir adaydır.
  • Mevcut hosting paketinde yalnız MySQL sunulan basit siteler: Paketi zorlamayın, MySQL ile devam edin.

Takımın bilgisi de kriterdir. Ekibiniz yıllardır MySQL ile çalışıyorsa ve proje basitse, veritabanı değiştirmek kazandırmaktan çok maliyet getirir. Tersine, yeni bir yazılım ürünü kuruyorsanız ve veri modeli karmaşıksa PostgreSQL ile başlamak mantıklıdır.

Bir de tuzak var: "En hızlı veritabanı hangisi?" diye sormak yanlış soru sormaktır. Hız; şemaya, dizinlere, sorgulara ve donanıma bağlıdır. Bu yüzden iddialı karşılaştırma rakamlarına temkinli yaklaşın.

Özel bir yazılım ya da e-ticaret altyapısı planlıyorsanız özel yazılım geliştirme hizmetimizde veritabanı seçimini ihtiyaca göre birlikte netleştiririz.

Kurulumdan önce hangi kararları vermelisiniz?

Komutlara geçmeden önce üç soruya cevap verin. İlk olarak sunucunuza root ya da sudo erişiminiz var mı? Paylaşımlı hostingte PostgreSQL'i kendiniz kuramazsınız. Ancak bazı paneller hazır PostgreSQL seçeneği sunar, bunu paketinizin özelliklerinden kontrol edin.

İkinci soru sürümdür. Ubuntu, kendi deposunda sabit bir PostgreSQL sürümü sunar ve bu sürüm, o Ubuntu sürümünün ömrü boyunca destek alır. Daha yeni bir sürüm isterseniz PostgreSQL'in kendi apt deposunu (PGDG) eklersiniz.

Üçüncü soru yedeklemedir. Veritabanına dokunmadan önce çalışan bir yedeğiniz olmalı. Yedek stratejisi için web sitesi yedekleme stratejisi yazımıza bakın.

Sürüm politikasını da bilin. Resmi sayfaya göre yeni ana sürüm yaklaşık yılda bir çıkar ve her ana sürüm beş yıl destek alır. Küçük sürümler ise en az üç ayda bir çıkar. Dolayısıyla desteği bitmiş bir sürümde kalmak güvenlik riskidir. Kaynak: PostgreSQL sürüm politikası.

PostgreSQL'i Ubuntu'ya nasıl kurarsınız?

En kısa yol Ubuntu'nun kendi deposudur. Resmi indirme sayfası ve Ubuntu sunucu dokümanı aynı komutu verir. Önce paket listesini güncelleyin, sonra paketi kurun.

sudo apt update
sudo apt install postgresql

Kurulum bittikten sonra servisin çalıştığını doğrulayın. Aşağıdaki komutlar servis durumunu ve istemci sürümünü gösterir. Debian tabanlı sistemlerdeki postgresql-common paketi, pg_lsclusters aracıyla küme listesini de sunar.

sudo systemctl status postgresql
psql --version
pg_lsclusters

Servisi yeniden başlatmak için Ubuntu dokümanındaki komutu kullanın: sudo systemctl restart postgresql.service. Yapılandırma dosyaları ise /etc/postgresql/<sürüm>/main/ klasöründe durur. Buradaki sürüm kısmı sizin kurduğunuz sürüm numarasıdır.

Kurulumdan sonra sunucuya dışarıdan erişim kapalıdır. Çünkü listen_addresses ayarının varsayılan değeri localhost'tur. Bu güvenli bir başlangıçtır, ilerideki bölümde dışarı açmayı konuşacağız.

PostgreSQL'in daha yeni sürümünü PGDG deposundan nasıl kurarsınız?

Ubuntu'nun deposundaki sürüm size yetiyorsa bu bölümü atlayın. Daha yeni bir ana sürüme ihtiyacınız varsa resmi PostgreSQL apt deposunu ekleyebilirsiniz. İndirme sayfası otomatik bir betik sunar.

sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh

Betik depoyu ve imza anahtarını ekler. Ardından istediğiniz sürümü paket adıyla kurarsınız. Paket adı postgresql-<sürüm> biçimindedir. Güncel kararlı sürüm numarasını indirme sayfasından okuyun, biz burada rakam yazmıyoruz.

sudo apt update
sudo apt install postgresql-<sürüm>

Dikkat edin: Betikleri internetten indirip root yetkisiyle çalıştırmak bir güven kararıdır. Burada güvendiğiniz kaynak PostgreSQL'in resmi sitesidir. Başka bir adresten gelen benzer komutlara aynı güveni göstermeyin. Elle yapılandırma adımları da aynı indirme sayfasında yer alır.

Üretimde çalışan bir sunucuya yeni sürüm koymadan önce bir test sunucusunda deneyin. Ana sürüm yükseltmeleri veri klasörü uyumsuzluğu nedeniyle dump ve geri yükleme ya da pg_upgrade aracı gerektirir.

psql ile ilk bağlantıyı nasıl yaparsınız?

Kurulum, postgres adında bir sistem kullanıcısı ve aynı adda bir veritabanı rolü oluşturur. İlk bağlantıyı bu kullanıcı olarak yaparsınız. Ubuntu dokümanı şu komutu verir.

sudo -u postgres psql

İstem satırı değişir ve psql komutlarını girebilirsiniz. Ters eğik çizgiyle başlayan komutlar psql'e özeldir, SQL değildir. Başlangıç için şunlar yeterlidir.

  • \l komutu veritabanlarını listeler.
  • \du komutu rolleri, yani kullanıcıları listeler.
  • \conninfo komutu hangi veritabanına, hangi kullanıcıyla bağlandığınızı gösterir.
  • \q komutu psql'den çıkar.

Uygulamanız için postgres rolünü kullanmayın. Bu rol süper kullanıcıdır, yani her şeyi yapabilir. Uygulama için sınırlı yetkili ayrı bir rol açmak hem güvenlik hem de hata kontrolü açısından doğru yaklaşımdır.

Kullanıcı ve veritabanını nasıl oluşturursunuz?

İki yol var: SQL komutları ya da kabuk araçları. createuser aracı, CREATE ROLE komutunun kabuk sarmalayıcısıdır; dokümana göre ikisi arasında etkin bir fark yoktur. Biz psql içinden SQL yazmayı öneriyoruz, çünkü tek yerde kalırsınız.

CREATE ROLE uygulama_kullanici WITH LOGIN;
\password uygulama_kullanici
CREATE DATABASE uygulama_db OWNER uygulama_kullanici;

\password komutu parolayı sizden ister ve sunucuya şifreli olarak gönderir. Parolayı komut satırına ya da SQL metnine yazmak, onu kabuk geçmişinde ve günlüklerde bırakabilir. Bu yüzden etkileşimli komutu tercih edin. Parolayı bir parola yöneticisinde saklayın.

Kabuktan çalışmak isterseniz aşağıdaki iki komut aynı işi görür. createuser için -P bayrağı parola sorar, createdb için -O bayrağı sahibi belirler.

sudo -u postgres createuser -P uygulama_kullanici
sudo -u postgres createdb -O uygulama_kullanici uygulama_db

Bağlantıyı denemek için şu komutu kullanın: psql -h localhost -U uygulama_kullanici -d uygulama_db. Parola isterse rol ve pg_hba.conf doğru çalışıyor demektir. Hata alırsanız bir sonraki bölüm sorunun nedenini açıklar.

pg_hba.conf nedir ve nasıl çalışır?

pg_hba.conf, istemci kimlik doğrulamasını denetleyen dosyadır. Adı "host-based authentication" ifadesinden gelir. Her satır bir kural tanımlar: kim, hangi veritabanına, hangi adresten, hangi yöntemle bağlanabilir. Ubuntu'da dosya /etc/postgresql/<sürüm>/main/pg_hba.conf yolunda durur.

Bir kural şu alanlardan oluşur: bağlantı türü, veritabanı, kullanıcı, adres ve yöntem. Bağlantı türü local ise Unix soketi, host ise TCP/IP bağlantısı anlamına gelir. hostssl ise yalnız şifreli TCP/IP bağlantılarını eşler.

AlanAnlamıÖrnek değer
TYPEBağlantı türülocal, host, hostssl
DATABASEHedef veritabanıuygulama_db, all
USERBağlanan roluygulama_kullanici, all
ADDRESSİstemci adresi (CIDR)127.0.0.1/32
METHODDoğrulama yöntemiscram-sha-256, peer, reject

En önemli kural şudur: PostgreSQL, bağlantı türü, adres, veritabanı ve kullanıcıyla eşleşen ilk satırı uygular. Sonraki satırlara geçmez. İlk eşleşen satırda doğrulama başarısız olursa, aşağıdaki satırlara bakmaz. Hiçbir satır eşleşmezse PostgreSQL erişimi reddeder.

pg_hba.conf'a doğru satırı nasıl eklersiniz?

Uygulama aynı sunucuda çalışıyorsa ve TCP üzerinden bağlanıyorsa, yerel adres için bir parola satırı yeterlidir. Dokümandaki örnek biçim şöyledir. Kendi veritabanı ve rol adlarınızla değiştirin.

host    uygulama_db    uygulama_kullanici    127.0.0.1/32    scram-sha-256

Parola doğrulama yöntemi olarak scram-sha-256 seçin. Dokümana göre password_encryption ayarının varsayılan değeri scram-sha-256'dır. Aynı sayfa MD5 desteğinin kullanımdan kalkacağını da belirtir. Bu yüzden yeni kurulumlarda MD5 seçmeyin.

Dosyayı düzenledikten sonra ayarı yeniden yüklemeniz gerekir. Restart şart değildir. Aşağıdaki komutlardan biri yeterlidir.

sudo systemctl reload postgresql
sudo -u postgres psql -c "SELECT pg_reload_conf();"

En tehlikeli yöntem trust'tır. Dokümana göre bu yöntem, sunucuya bağlanabilen herkesin parola olmadan istediği kullanıcı gibi giriş yapmasına izin verir. Hızlı test için bile trust satırını bırakmayın. Bırakırsanız unutursunuz ve kapı açık kalır.

Dosyada daha önce yazılı satırları silmeden önce okuyun ve bir kopya alın. Satır sırası önemli olduğundan, yanlış yere eklenen bir kural işe yaramaz ya da gereğinden fazla izin verir.

Uzaktan bağlantıyı güvenli şekilde nasıl açarsınız?

Çoğu web projesinde veritabanını internete açmanıza gerek yoktur. Uygulama ve veritabanı aynı sunucudaysa localhost yeterlidir. Ayrı bir uygulama sunucusu ya da raporlama aracı bağlanacaksa dışarı açmak gerekir. Bu durumda üç ayarı birlikte yaparsınız.

  1. postgresql.conf içinde listen_addresses ayarını değiştirin. Varsayılan değeri localhost'tur ve yalnız yerel bağlantıya izin verir. Sunucu bu ayarı yalnız başlarken okur, yani restart gerekir.
  2. pg_hba.conf içine yalnız gereken adrese ve gereken role izin veren, şifreli bağlantıya zorlayan bir satır ekleyin.
  3. Güvenlik duvarında 5432 portunu yalnız o adrese açın.

Aşağıdaki örnekte 203.0.113.10 dokümantasyon amaçlı örnek bir adrestir. Kendi istemci adresinizi yazın. Ubuntu dokümanı da hostssl ile scram-sha-256 kombinasyonunu örnek verir.

hostssl    uygulama_db    uygulama_kullanici    203.0.113.10/32    scram-sha-256
sudo ufw allow from 203.0.113.10 to any port 5432 proto tcp
sudo systemctl restart postgresql

Portu herkese açmayın. Saldırganlar veritabanı portunu internette hızla tarar ve parola denemeleri yapar. Şifreli bağlantı için sunucuda TLS sertifikası da gerekir; sertifika mantığı için SSL sertifikası rehberimize bakabilirsiniz.

Bağlantı sorunlarını nasıl teşhis edersiniz?

Bağlanamıyorsanız tahmin yürütmeyin, sırayla kontrol edin. Her adım bir olasılığı eler. Önce servisin çalıştığını doğrulayın, sonra ağ katmanına geçin.

  1. sudo systemctl status postgresql komutuyla servisin çalıştığını görün.
  2. sudo ss -ltnp | grep 5432 komutuyla portun dinlendiğini ve hangi adreste dinlendiğini kontrol edin.
  3. İstemciden sunucuya ulaşıp ulaşamadığınızı test edin. Güvenlik duvarı kuralını ve sağlayıcının ağ filtresini gözden geçirin.
  4. Hata iletisini okuyun. "pg_hba.conf entry" içeren bir ileti, kuralın eksik ya da yanlış olduğunu söyler.
  5. PostgreSQL günlüğüne bakın. Ubuntu'da günlükler genellikle /var/log/postgresql/ altında durur.

Sunucu adresiniz alan adıyla bağlanıyorsa, DNS kaydını da doğrulayın. Bunun için DNS sorgulama aracımızı ve IP sorgulama aracımızı kullanabilirsiniz.

Hata mesajı "password authentication failed" ise kural eşleşmiş ama parola ya da rol yanlıştır. "no pg_hba.conf entry" ise hiçbir kural eşleşmemiştir. Bu iki mesajı ayırt etmek, yarım saatlik aramayı iki dakikaya indirir.

PostgreSQL kurulumunu baştan sona nasıl özetlersiniz?

Dağınık komutları tek bir akışta toplayalım. Aşağıdaki sıra, bir Ubuntu VPS'te sıfırdan başlayan biri için mantıklı bir yol haritasıdır. Her adımın ayrıntısı yukarıdaki bölümlerde var.

  1. Önce yedek ve erişim bilgilerinizi hazırlayın. Sunucuya sudo yetkisiyle girebildiğinizi doğrulayın.
  2. apt ile PostgreSQL'i kurun ve servis durumunu kontrol edin.
  3. psql ile postgres olarak bağlanın, uygulama için sınırlı yetkili bir rol ve bir veritabanı açın.
  4. pg_hba.conf dosyasını açıp mevcut satırları okuyun. Gerekirse scram-sha-256 kullanan dar bir satır ekleyin ve yapılandırmayı yeniden yükleyin.
  5. Uygulamanızın bağlantı bilgisini ortam değişkeni ya da gizli yapılandırma dosyasında tutun. Parolayı kod deposuna koymayın.
  6. Bir yedek alın ve onu test veritabanına geri yükleyerek deneyin.

PostgreSQL nedir sorusunu cevaplamak kolaydır, ama işletmek disiplin ister. Bu altı adımı bir kez yazıya dökün ve her yeni projede aynı listeyi uygulayın. Böylece bir adımı atlama ihtimaliniz düşer.

Uygulama tarafında bağlantı dizesini nereye yazacağınız da önemlidir. WordPress, Laravel ya da özel bir yazılım kullanıyor olabilirsiniz. Hepsinde bağlantı bilgisi bir yapılandırma dosyasında ya da ortam değişkeninde durur. Bu dosyayı herkese açık bir klasöre koymayın ve sürüm kontrol sistemine göndermeyin.

Yedekleme ve güncellemeyi nasıl düşünmelisiniz?

PostgreSQL'in kendi yedek aracı pg_dump'tır. Tek bir veritabanının mantıksal yedeğini alır. Özel biçim ile aldığınız yedeği pg_restore ile geri yüklersiniz. Aşağıdaki komutlar örnektir; adları kendi projenize göre değiştirin.

pg_dump -h localhost -U uygulama_kullanici -Fc -f uygulama_db.dump uygulama_db
pg_restore -h localhost -U uygulama_kullanici -d yeni_db uygulama_db.dump

Yedek almak yetmez, geri yüklemeyi de denemeniz gerekir. Geri yükleme testinden geçmeyen bir yedek size güvence vermez. Bunu bir test veritabanında düzenli olarak deneyin. Yedekleri sunucunun dışında, ayrı bir yerde saklayın.

Güncelleme tarafında resmi öneri açıktır: Topluluk, eski bir küçük sürümde kalmayı, küçük sürüm yükseltmesi yapmaktan daha riskli bulur. Küçük sürüm yükseltmesinde sunucuyu durdurur, ikilileri günceller ve yeniden başlatırsınız; dump gerekmez. Ubuntu'da bu işi çoğunlukla apt güncellemesi görür.

Ana sürüm yükseltmesi farklıdır. Veri klasörü uyumsuz olduğu için dump ve geri yükleme ya da pg_upgrade gerekir. Bu işi planlı bir bakım penceresinde ve yedekle yapın.

PostgreSQL'i ne zaman kendiniz yönetmemeli, hosting sağlayıcınıza bırakmalısınız?

PostgreSQL nedir öğrenmek bir şeydir, onu canlı sistemde yönetmek başka bir şeydir. Kendi VPS'inizde çalışmak size kontrol verir. Ama kontrol, sorumluluğu da getirir. Aşağıdaki durumlarda işi sağlayıcınıza ya da deneyimli bir sistem yöneticisine bırakmak daha doğrudur.

  • Canlı bir e-ticaret sitesinin veritabanında ana sürüm yükseltmesi yapacaksanız.
  • Yedeğiniz yoksa ya da geri yüklemeyi hiç denemediyseniz.
  • Veritabanını internete açmanız gerekiyorsa ve güvenlik duvarı kurallarından emin değilseniz.
  • Replikasyon, yüksek erişilebilirlik ya da büyük veri hacmi gibi ileri yapılandırmalara ihtiyaç duyuyorsanız.
  • Sunucu yoğun saldırı altındaysa ve günlüklerde olağan dışı bağlantı denemeleri görüyorsanız.

Yönetilen veritabanı hizmeti de bir seçenektir. Bakım, yedek ve yükseltme işini sağlayıcı üstlenir, siz de uygulamaya odaklanırsınız. Karşılığında maliyet ve esneklik dengesini tartın.

Sağlayıcı seçerken sormanız gereken soruları web sitesi için hosting seçimi yazımızda topladık. Destek talebi açarken sorunun saatini, hata iletisini ve denediğiniz adımları ekleyin. Böylece sağlayıcı teşhisi çok daha hızlı koyar.

Veritabanı seçimi site hızını ve SEO'yu nasıl etkiler?

Doğrudan etkilemez; dolaylı etkiler. Arama motorları veritabanı marka adına bakmaz. Ancak yavaş sorgular sunucunun ilk yanıtını geciktirir ve bu gecikme sayfa hızına yansır. Dolayısıyla sorun veritabanı markası değil, sorgu ve dizin kalitesidir.

Hız sorunlarında sıralama basittir. Önce yavaş sorguları bulun, sonra dizinleri kontrol edin, ardından önbellek ekleyin. Önbelleğin mantığı için Redis ve Memcached yazımıza göz atın. Hızın aramadaki rolü için site hızı SEO'yu nasıl etkiler yazısı faydalıdır.

E-ticarette etki daha görünürdür. Sepet ve ödeme adımları veritabanına yazar, bu yüzden bu sayfalarda gecikme dönüşümü düşürür. Bu konuyu e-ticarette sayfa hızı yazısında ayrıca işledik.

Veritabanı güvenliği de SEO ile bağlantılıdır. Saldırganın ele geçirdiği bir veritabanı, sitenize istenmeyen içerik ya da bağlantı ekletebilir. Bu risk için OWASP Top 10 yazımıza bakın.

PostgreSQL kurulumunda en sık yapılan hatalar nelerdir?

Aşağıdaki hatalar, ekiplerde ve bireysel projelerde sık görülen örüntülerdir. Bunlar bir saha istatistiği değil, resmi dokümanın uyarılarından ve genel güvenlik pratiğinden çıkan bir kontrol listesidir.

  • Uygulamayı postgres süper kullanıcısıyla bağlamak.
  • pg_hba.conf içinde trust bırakmak.
  • listen_addresses değerini herkese açıp güvenlik duvarını unutmak.
  • pg_hba.conf'u değiştirip yeniden yüklemeyi atlamak.
  • listen_addresses değişikliğinden sonra restart yapmamak.
  • Yedek almak ama geri yüklemeyi denememek.
  • Desteği biten bir ana sürümde kalmak.
  • Parolayı komut satırına düz metin olarak yazmak.

Bu listeyi kurulum sonrası kontrol listesi olarak kullanın. Her maddeyi tek tek işaretleyin. Ayrıca değişiklikleri not alın; altı ay sonra neyi neden değiştirdiğinizi hatırlamanız zor olur.

PostgreSQL nedir, özetle nasıl yola çıkarsınız?

PostgreSQL güçlü, standartlara yakın ve genişletilebilir bir veritabanıdır. JSONB ve eklenti ekosistemi onu özellikle veri modeli karmaşık projelerde cazip kılar. MySQL ise yaygınlığı ve WordPress gibi hazır sistemlerle uyumu nedeniyle çoğu basit sitede doğru seçimdir.

Kurulum için Ubuntu'da iki komut yeter. Asıl iş sonrasındadır: sınırlı yetkili bir rol, doğru pg_hba.conf satırı, kapalı kalan bir port ve geri yükleme testinden geçmiş bir yedek. Bu dört madde, kurulumun güvenlik omurgasıdır.

Kendi başınıza ilerlemek istemiyorsanız yazılım ve altyapı kararlarında yanınızdayız. Ekibimizle özel yazılım geliştirme kapsamını konuşabilir, projeniz için hangi veritabanının uygun olduğunu birlikte değerlendirebiliriz. Arka uç tarafını anlamak isterseniz back-end nedir yazısı iyi bir başlangıçtır.

Sıkça Sorulan Sorular

PostgreSQL ücretsiz mi?
Evet, PostgreSQL açık kaynaklıdır ve serbest bir lisansla dağıtılır, yani yazılım için lisans ücreti ödemezsiniz. Yine de sunucu, bakım ve yedekleme maliyetleriniz olur. Kendi VPS'inizde çalıştırıyorsanız bu işleri siz üstlenirsiniz. Yönetilen bir hizmet kullanıyorsanız bakım karşılığında ücret ödersiniz. Güncel fiyatı sağlayıcınızdan ayrıca öğrenin.
PostgreSQL mi MySQL mi daha iyidir?
Hangisinin daha iyi olduğunu söylemek doğru olmaz, çünkü cevap projenize bağlıdır. WordPress gibi hazır sistemler MySQL ya da MariaDB ister. Yoğun JSON verisi, karmaşık raporlama ve ileri SQL özellikleri gerektiren yeni yazılım projelerinde PostgreSQL güçlü bir adaydır. Ekibinizin bilgisini de karara katın; çünkü bakımı üstlenecek kişinin tanıdığı araç çoğu zaman en güvenli seçimdir.
Paylaşımlı hostingte PostgreSQL kullanabilir miyim?
Bazı hosting paketleri PostgreSQL seçeneği sunar, bazıları sunmaz. Paylaşımlı hostingte sunucuya kurulum yapamazsınız, yalnızca panelin verdiği veritabanı hizmetini kullanırsınız; yani sürüm ve yapılandırma sağlayıcının elindedir. Paketinizin özelliklerine bakın ya da sağlayıcınıza sorun. Kendi kurulumunuzu istiyorsanız sudo erişimi olan bir VPS gerekir.
pg_hba.conf dosyası nerede bulunur?
Ubuntu'da dosya genellikle /etc/postgresql/SÜRÜM/main/pg_hba.conf yolundadır; sürüm kısmı sizin kurduğunuz ana sürümdür. Emin olmak için psql içinde SHOW hba_file; komutunu çalıştırın. Bu komut dosyanın gerçek yolunu gösterir. Dosyayı değiştirdikten sonra ayarı yeniden yüklemeyi unutmayın, yoksa değişiklik devreye girmez.
PostgreSQL'e dışarıdan nasıl bağlanırım?
Üç şeyi birlikte ayarlayın. Önce postgresql.conf içinde listen_addresses değerini değiştirip servisi yeniden başlatın. Sonra pg_hba.conf dosyasına yalnızca sizin adresinizi ve rolünüzü kapsayan, scram-sha-256 kullanan bir satır ekleyin. Son olarak güvenlik duvarında 5432 portunu yalnızca o adrese açın.
Kurulumdan sonra postgres kullanıcısının parolasını değiştirmem gerekir mi?
Ubuntu dokümanı, postgres rolü için ALTER USER ile parola belirlemeyi örnek gösterir. Yerel bağlantıda zaten sistem kullanıcısıyla giriş yaparsınız. Parolaya yalnız ağ üzerinden bağlanacaksanız ihtiyaç duyarsınız. Uygulama için ise postgres rolünü hiç kullanmayın; sınırlı yetkili ayrı bir rol açın ve parolasını güçlü seçin.
  • PostgreSQL
  • MySQL
  • veritabanı
  • Ubuntu
  • psql
  • pg_hba.conf
  • JSONB
  • VPS
Paylaş:
Talha Aslan

Google Partner dijital pazarlama uzmanı. 2012’den beri SEO, Google Ads, web tasarım ve e-ticaret projelerinde sahada; bu blogda gördüğünüz her yazı o deneyimden çıkar.

Sıradaki proje

Projenizi konuşalım.

Talebiniz doğrudan Talha Aslan ve ekibine ulaşır: stratejiyi Talha kurar, uygulamayı deneyimli ekip yürütür. İlk istişare ücretsizdir; hedefinizi dinler, net bir yol haritasıyla döneriz.