PostgreSQL Nedir? MySQL ve MongoDB ile Farkları, Kullanımı ve Geliştiricileri Rehberi

postgresql-mongodb

Veritabanı yönetimi, bir uygulamanın en kritik bileşenlerinden biridir. Doğru veritabanı sistemi seçmek; performans, ölçeklenebilirlik ve güvenlik açısından büyük fark yaratır.

PostgreSQL Nedir?

PostgreSQL, açık kaynaklı, güçlü ve genişletilebilir bir nesne-ilişkisel veritabanı yönetim sistemidir (ORDBMS).

İlk olarak 1986 yılında Kaliforniya Üniversitesi’nin Ingres projesinden doğan PostgreSQL, yıllar içinde modern veritabanı dünyasının en güçlü alternatiflerinden biri haline gelmiştir.

PostgreSQL’in Öne Çıkan Özellikleri

  • ACID Uyumluluğu: Transaction’lar güvenlidir; Atomicity, Consistency, Isolation, Durability prensiplerini tam olarak destekler.
  • JSON & NoSQL Desteği: Geleneksel ilişkisel veri yapısının yanı sıra JSONB formatında NoSQL benzeri esneklik sunar.
  • Gelişmiş İndeksleme: GIN, GiST, B-tree, Hash gibi farklı indeks türlerini destekler.
  • Genişletilebilir Yapı: Kendi veri tiplerinizi, fonksiyonlarınızı ve eklentilerinizi tanımlayabilirsiniz.
  • Yüksek Güvenlik: Row-level security, SSL bağlantıları ve şifreleme özellikleri bulunur.

PostgreSQL vs MySQL vs MongoDB

ÖzellikPostgreSQLMySQL
Veri ModeliNesne-ilişkiselİlişkisel
ACID DesteğiTam destekÇoğu motor destekliyor (InnoDB)
JSON DesteğiGelişmiş (JSONB)Sınırlı
PerformansKarmaşık sorgularda güçlüBasit sorgularda hızlı
GenişletilebilirlikYüksek (custom function, data type)Düşük
Kullanım AlanıAnalitik, veri bilimi, finansal sistemlerWeb uygulamaları, CMS’ler

NOT: MySQL hız açısından öne çıkarken, PostgreSQL doğruluk ve karmaşık veri işlemlerinde çok daha güçlüdür.

PostgreSQL vs MongoDB

ÖzellikPostgreSQLMongoDB
Veri Tipiİlişkisel + JSONTam NoSQL (belge tabanlı)
Sorgulama DiliSQLBSON / JSON tabanlı sorgular
TutarlılıkYüksek (ACID)Esnek (Eventually Consistent)
İlişkilerNative JOIN destekliJOIN yok, nested yapılar kullanılır
Veri Modeli DeğişimiSabit şemaŞemasız (esnek)

MongoDB hızlı prototipleme ve dinamik veri yapıları için uygundur.

Ancak PostgreSQL, karmaşık veri bütünlüğü gerektiren sistemlerde daha güvenilirdir.

PostgreSQL Kurulumu

macOS:

brew install postgresql

Ubuntu/Debian:

sudo apt update

sudo apt install postgresql postgresql-contrib

Windows:

https://www.postgresql.org/download adresinden yükleyebilirsin.

PostgreSQL kurulunca psql adında bir komut satırı aracıyla birlikte gelir.

Temel Komutlar

psql -U postgres

CREATE DATABASE deneme;

CREATE TABLE kullanicilar (
id SERIAL PRIMARY KEY,
ad VARCHAR(50),
email VARCHAR(100) UNIQUE,
olusturma_tarihi TIMESTAMP DEFAULT NOW()
);

Hangi IDE veya Araçlar Kullanılabilir?

PostgreSQL için kullanabileceğin en popüler IDE’ler:

  • pgAdmin – PostgreSQL’in resmi yönetim aracı.
  • DataGrip (JetBrains) – Profesyonel SQL geliştirme ortamı.
  • DBeaver – Tüm veritabanlarını destekleyen açık kaynak GUI.
  • TablePlus – Hızlı, modern ve macOS kullanıcıları için ideal.
  • VSCode SQLTools Eklentisi – Hafif ve entegre kullanım sağlar.

Neden Bir Developer PostgreSQL Kullanmalı?

  • Tam SQL Desteği: Karmaşık sorgular, CTE, Window Functions gibi modern SQL özellikleri.
  • Veri Güvenliği: Hassas sistemler (bankacılık, sağlık, kurumsal) için ideal.
  • NoSQL Esnekliği: JSONB ile yapılandırılmamış verileri de yönetebilirsin.
  • Topluluk Desteği: Geniş bir açık kaynak topluluğu, eklenti ve dokümantasyon ekosistemi.
  • Performans ve Stabilite: Büyük ölçekli uygulamalarda uzun vadeli sürdürülebilirlik sağlar.

PostgreSQL Kullanırken Dikkat Edilmesi Gerekenler

  • Index Yönetimi: Fazla indeks performansı düşürebilir.
  • VACUUM ve ANALYZE: Düzenli bakım yapılmazsa tablo şişebilir.
  • Bağlantı Havuzu: pgbouncer veya pgpool kullanarak bağlantı yükünü azalt.
  • Transaction Yönetimi: Transaction’lar doğru kapatılmalı, aksi halde deadlock oluşabilir.
  • Yedekleme Stratejisi: pg_dump veya WAL ile düzenli yedek alınmalıdır.

PostgreSQL, hem ilişkisel hem de NoSQL dünyasının en iyi özelliklerini bir arada sunan güçlü bir veritabanıdır.

MySQL kadar yaygın, MongoDB kadar esnek, ancak her ikisinden de daha güçlü bir veri bütünlüğü sağlar.

Bir geliştirici olarak PostgreSQL’i öğrenmek, seni ileri seviye veri yönetimi, performans optimizasyonu ve güvenlik konularında bir adım öne çıkarır.

Şimdi örnek olarak bir postgreSQL bağlantısı nasıl yapılır görelim :

Nodejs :

import express from “express”;
import pkg from “pg”;

const { Pool } = pkg;
const app = express();
app.use(express.json());

// PostgreSQL bağlantısı
const pool = new Pool({
user: “postgres”,
host: “localhost”,
database: “deneme”,
password: “12345”,
port: 5432,
});

// Örnek tablo sorgusu
app.get(“/users”, async (req, res) => {
try {
const result = await pool.query(“SELECT * FROM kullanicilar”);
res.json(result.rows);
} catch (err) {
console.error(err);
res.status(500).send(“Sunucu hatası”);
}
});

// Yeni kullanıcı ekleme
app.post(“/users”, async (req, res) => {
const { ad, email } = req.body;
try {
await pool.query(“INSERT INTO kullanicilar (ad, email) VALUES ($1, $2)”, [ad, email]);
res.send(“Kullanıcı eklendi!”);
} catch (err) {
console.error(err);
res.status(500).send(“Veri eklenemedi”);
}
});

app.listen(3000, () => console.log(“Server 3000 portunda çalışıyor”));

Python:

from flask import Flask, request, jsonify
import psycopg2

app = Flask(name)

conn = psycopg2.connect(
host=”localhost”,
database=”deneme”,
user=”postgres”,
password=”12345″
)

@app.route(“/users”, methods=[“GET”])
def get_users():
cur = conn.cursor()
cur.execute(“SELECT * FROM kullanicilar”)
users = cur.fetchall()
cur.close()
return jsonify(users)

@app.route(“/users”, methods=[“POST”])
def add_user():
data = request.get_json()
cur = conn.cursor()
cur.execute(“INSERT INTO kullanicilar (ad, email) VALUES (%s, %s)”, (data[“ad”], data[“email”]))
conn.commit()
cur.close()
return jsonify({“message”: “Kullanıcı eklendi!”})

if name == “main“:
app.run(debug=True, port=5000)

Goland

package main

import (
“database/sql”
“encoding/json”
“fmt”
“log”
“net/http”

_ "github.com/lib/pq"

)

type User struct {
ID int json:"id"
Ad string json:"ad"
Email string json:"email"
}

var db *sql.DB

func main() {
var err error
connStr := “user=postgres password=12345 dbname=deneme sslmode=disable”
db, err = sql.Open(“postgres”, connStr)
if err != nil {
log.Fatal(err)
}

http.HandleFunc("/users", getUsers)
http.HandleFunc("/add", addUser)

fmt.Println("Server 8080 portunda çalışıyor...")
http.ListenAndServe(":8080", nil)

}

func getUsers(w http.ResponseWriter, r *http.Request) {
rows, err := db.Query(“SELECT id, ad, email FROM kullanicilar”)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
defer rows.Close()

var users []User
for rows.Next() {
    var u User
    rows.Scan(&u.ID, &u.Ad, &u.Email)
    users = append(users, u)
}

json.NewEncoder(w).Encode(users)

}

func addUser(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, “POST kullanılmalı”, 405)
return
}
var u User
json.NewDecoder(r.Body).Decode(&u)
_, err := db.Exec(“INSERT INTO kullanicilar (ad, email) VALUES ($1, $2)”, u.Ad, u.Email)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
w.Write([]byte(“Kullanıcı eklendi!”))
}

PostgreSQL, hem ilişkisel (SQL) hem de belge tabanlı (NoSQL) verileri yönetebilme yeteneği sayesinde günümüzün en güçlü ve esnek veritabanı sistemlerinden biridir.

MySQL’in hızını, MongoDB’nin esnekliğini ve Oracle’ın güvenilirliğini bir araya getirerek geliştiricilere tam bir kurumsal seviye çözüm sunar.

Eğer projen yüksek veri bütünlüğü, karmaşık sorgular veya analitik işlemler gerektiriyorsa PostgreSQL doğru tercihtir.

Ayrıca açık kaynak yapısı, eklenti desteği ve güçlü topluluğu sayesinde uzun vadede hem teknik hem de ekonomik avantaj sağlar.

Bir geliştirici olarak PostgreSQL’e geçmek;

Daha stabil sistemler,

Daha güvenli veri yönetimi,

Ve ölçeklenebilir mimariler kurmak anlamına gelir.

Veri dünyasında fark yaratmak istiyorsan, PostgreSQL öğrenmeye başlamak gelecekteki tüm projelerinde sana büyük bir güç kazandıracaktır.

Leave a Reply

Your email address will not be published. Required fields are marked *