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
| Özellik | PostgreSQL | MySQL |
|---|---|---|
| Veri Modeli | Nesne-ilişkisel | İlişkisel |
| ACID Desteği | Tam destek | Çoğu motor destekliyor (InnoDB) |
| JSON Desteği | Gelişmiş (JSONB) | Sınırlı |
| Performans | Karmaşık sorgularda güçlü | Basit sorgularda hızlı |
| Genişletilebilirlik | Yüksek (custom function, data type) | Düşük |
| Kullanım Alanı | Analitik, veri bilimi, finansal sistemler | Web 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
| Özellik | PostgreSQL | MongoDB |
|---|---|---|
| Veri Tipi | İlişkisel + JSON | Tam NoSQL (belge tabanlı) |
| Sorgulama Dili | SQL | BSON / JSON tabanlı sorgular |
| Tutarlılık | Yüksek (ACID) | Esnek (Eventually Consistent) |
| İlişkiler | Native JOIN destekli | JOIN yok, nested yapılar kullanılır |
| Veri Modeli Değişimi | Sabit ş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 psycopg2app = 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 intjson:"id"
Ad stringjson:"ad"
Email stringjson:"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.