Tüm barındırma hizmetlerinde 15% tasarruf edin

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın: Skills Başlayın
Bölüm
Linux Yönetim

PostgreSQL Veritabanına Nasıl Bağlanılır: Tüm Yöntemler için Tam Rehber

PostgreSQL, güçlü, özellik açısından zengin, açık kaynaklı bir ilişkisel veritabanı yönetim sistemi (RDBMS) olup, güvenilirlik, esneklik ve yüksek performans açısından sağlam bir itibar kazanmıştır. Hafif web uygulamalarından karmaşık kurumsal düzey sistemlere kadar, PostgreSQL dünya çapında geliştiriciler, veri mühendisleri ve veritabanı yöneticileri için tercih edilen seçimdir. Güçlü mimarisi, gelişmiş SQL uyumluluğu ve olağanüstü genişletilebilirliği, onu günümüzde en güvenilir veritabanı platformlarından biri haline getirmektedir.

Yeni bir projeyi VPS Hosting ortamında kuruyor olsanız ya da bir Dedicated Server üzerinde üretim veritabanını yönetiyor olsanız, PostgreSQL veritabanına nasıl bağlanacağını anlamak kesinlikle temel bir beceridir. Doğru şekilde yapılandırılmış bir bağlantı, güvenli erişim, optimal performans ve verimli veritabanı yönetimi sağlar — ve sorguları çalıştırmadan, veri içe aktarmadan veya dışa aktarmadan, kullanıcı rollerini yönetmeden veya veritabanınızı uygulamalarla entegre etmeden önce gerekli ilk adımdır.

Bu kapsamlı rehber, PostgreSQL’e bağlanmanın tüm ana yöntemlerini kapsar: komut satırı arayüzü (CLI), grafik GUI araçları ve Python ile Node.js kullanarak programlı bağlantılar.

1. PostgreSQL’e Bağlanmak için Ön Koşullar

Herhangi bir bağlantı denemesinden önce, aşağıdaki ön koşulların yerine getirildiğini doğrulayın:

PostgreSQL Yüklü ve Çalışıyor

PostgreSQL’in yerel makinenizde yüklü olduğundan veya uzak bir PostgreSQL sunucusuna ağ erişiminiz olduğundan emin olun. Hizmetin çalışıp çalışmadığını şu şekilde doğrulayabilirsiniz:

# On Linux (systemd-based)
sudo systemctl status postgresql

# On macOS (Homebrew)
brew services list | grep postgresql

# On Windows
sc query postgresql

Gerekli Erişim Kimlik Bilgileri

Bu kılavuzda ele alınan her bağlantı yöntemi için aşağıdaki ayrıntılara ihtiyacınız olacak:

ParametreAçıklamaVarsayılan Değer
HostSunucu hostname’i veya IP adresilocalhost veya 127.0.0.1
PortPostgreSQL’in dinlediği port5432
Kullanıcı AdıPostgreSQL kullanıcı hesabıpostgres
ŞifreBelirtilen kullanıcı için şifre*(kurulum sırasında ayarlanır)*
Veritabanı AdıBağlanılacak hedef veritabanıpostgres

Ağ ve Firewall Erişimi

Uzak bağlantılar için şunları sağlayın:

  • Port 5432 sunucunuzun firewall kurallarında açık olmalıdır.
  • PostgreSQL yapılandırma dosyası pg_hba.conf IP adresinizden bağlantılara izin vermelidir.
  • postgresql.conf dosyası listen_addresses uygun şekilde ayarlanmış olmalıdır (örneğin, '*' tüm arabirimler için veya belirli bir IP).

2. PostgreSQL’ye Komut Satırı Arayüzü (CLI) Aracılığıyla Bağlanma

psql komut satırı aracı, PostgreSQL ile etkileşim kurmanın en doğrudan ve evrensel olarak kullanılabilir yöntemidir. Her standart PostgreSQL kurulumunda önceden yüklenmiş olup, sistem yöneticileri ve ileri kullanıcılar tarafından tercih edilen araçtır.

Adım 1: Terminal veya Komut İstemini Açın

  • Linux / macOS: Terminal uygulamanızı açın.
  • Windows: Komut İstemini, PowerShell’i veya Windows Terminal’i açın. PostgreSQL bin dizininin sistem PATH değişkenine eklendiğinden emin olun.

Adım 2: psql Bağlantı Sözdizimini Kullanın

Standart psql bağlantı sözdizimi şu şekildedir:

psql -h host -p port -U username -d database

Parametre açıklaması:

  • -h host — Sunucunun ana bilgisayar adı veya IP adresi (örn. localhost yerel için veya 192.168.1.100 gibi uzak bir IP).
  • -p port — PostgreSQL’nin dinlediği port (varsayılan: 5432).
  • -U username — Kimlik doğrulaması yapılacak PostgreSQL kullanıcı adı.
  • -d database — Bağlanmak istediğiniz veritabanının adı.

Adım 3: Pratik Bir Bağlantı Örneği Çalıştırın

Yerel makinenizde mydb adlı bir veritabanına postgres süper kullanıcısı olarak bağlanmak için:

psql -h localhost -p 5432 -U postgres -d mydb

Parolayı girmeniz istenecektir. Başarılı kimlik doğrulamasından sonra psql kabuk istemini göreceksiniz:

mydb=#

Adım 4: psql Kabuğunda Sorguları Yürütün

psql kabuğunun içinde herhangi bir SQL sorgusu doğrudan çalıştırabilirsiniz:

-- Check the PostgreSQL server version
SELECT version();

-- List all databases
l

-- List all tables in the current database
dt

-- Run a query
SELECT * FROM my_table;

-- Describe a table's structure
d my_table

Adım 5: psql Kabuğundan Çıkın

Bağlantıyı kapatmak ve psql uygulamasından çıkmak için:

q

Bağlantı Dizesini Kullanma (URI Biçimi)

PostgreSQL ayrıca URI dizesi aracılığıyla bağlantıyı destekler; bu, betik yazma için uygundur:

psql "postgresql://postgres:your_password@localhost:5432/mydb"

PGPASSWORD Ortam Değişkenini Kullanma

Otomatik betiklerde parola istemi almaktan kaçınmak için:

export PGPASSWORD='your_password'
psql -h localhost -p 5432 -U postgres -d mydb

> Güvenlik Notu: Kabuk betiklerinde PGPASSWORD kullanmak kimlik bilgilerini işlem listelerinde açığa çıkarabilir. Üretim ortamları için bunun yerine .pgpass dosyasını kullanın (Güvenlik En İyi Uygulamaları bölümünde ele alınmıştır).

3. PostgreSQL’e Grafik Araçlar Kullanarak Bağlanma

Görsel arayüzü tercih eden kullanıcılar için, PostgreSQL veritabanlarına bağlanmayı, sorgu yapmayı ve yönetmeyi komut satırı sözdizimini ezberlemeden kolaylaştıran birkaç mükemmel GUI istemcisi vardır.

3.1 pgAdmin — Resmi PostgreSQL GUI

pgAdmin, PostgreSQL için resmi, açık kaynaklı yönetim ve yönetim aracıdır. SQL sorguları yürütmek, veritabanı nesnelerini yönetmek, performansı izlemek ve verileri görselleştirmek için kapsamlı bir web tabanlı ve masaüstü arayüzü sağlar.

pgAdmin ile Nasıl Bağlanılır

Adım 1: pgAdmin’i İndirin ve Yükleyin

En son sürümü resmi pgAdmin web sitesinden indirin. Kurulum paketleri Windows, macOS ve Linux için mevcuttur.

Adım 2: pgAdmin’i Başlatın

pgAdmin’i açın. Varsayılan web tarayıcınızda (masaüstü sürümü için) veya bağımsız bir uygulama olarak başlayacaktır.

Adım 3: Yeni Bir Sunucu Bağlantısı Oluşturun

  1. Sol kenar çubuğunda Servers üzerine sağ tıklayın.
  2. Create → Server… seçeneğini seçin

Adım 4: Genel Sekmeyi Yapılandırın

  • Name: Bu bağlantı için açıklayıcı bir ad girin (örn. Production DB veya Local Development).

Adım 5: Bağlantı Sekmesini Yapılandırın

Aşağıdaki alanları doldurun:

AlanDeğer
Host name/addresslocalhost (veya uzak IP/hostname)
Port5432
Maintenance databasepostgres
Usernamepostgres
PasswordPostgreSQL kullanıcı şifreniz

İsteğe bağlı olarak, geliştirme ortamlarında kolaylık için Save password seçeneğini işaretleyin.

Adım 6: Kaydedin ve Bağlanın

Save düğmesine tıklayın. pgAdmin hemen bağlanmaya çalışacaktır. Başarılı olursa, sunucunuz sol kenar çubuğunda görünecek ve veritabanlarını, şemaları, tabloları ve daha fazlasını görmek için genişletebilirsiniz.

Adım 7: Sorguları Çalıştırın

Herhangi bir veritabanına sağ tıklayın ve SQL editörünü açmak için Query Tool seçeneğini seçin. Sorguları yazabilir ve yürütebilir, sonuçları görüntüleyebilir ve verileri doğrudan arayüzden dışa aktarabilirsiniz.

3.2 DBeaver — Evrensel Veritabanı İstemcisi

DBeaver, PostgreSQL dahil 80’den fazla veritabanı sistemini destekleyen ücretsiz, açık kaynaklı, platformlar arası bir veritabanı yönetim aracıdır. Birden fazla veritabanı türüyle çalışan ve gelişmiş veri görselleştirme, ER diyagramı oluşturma ve veri dışa aktarma yeteneklerine ihtiyaç duyan geliştiriciler arasında özellikle popülerdir.

DBeaver ile Nasıl Bağlanılır

Adım 1: DBeaver’ı İndirin ve Yükleyin

DBeaver Community Edition’ı (ücretsiz) resmi DBeaver web sitesinden indirin. Windows, macOS ve Linux için mevcuttur.

Adım 2: Yeni Bir Veritabanı Bağlantısı Oluşturun

  1. DBeaver’ı açın.
  2. New Database Connection düğmesine (üst araç çubuğundaki fiş simgesi) tıklayın veya Database → New Database Connection seçeneğine gidin.

Adım 3: Veritabanı Türü Olarak PostgreSQL’i Seçin

Desteklenen veritabanları listesinden PostgreSQL seçeneğini seçin ve Next düğmesine tıklayın.

Adım 4: Bağlantı Ayrıntılarınızı Girin

Bağlantı formunu doldurun:

AlanDeğer
Hostlocalhost veya uzak IP/hostname
Port5432
Databasemydb (veya hedef veritabanınız)
Usernamepostgres
PasswordPostgreSQL kullanıcı şifreniz

Adım 5: Bağlantıyı Test Edin

Test Connection düğmesine tıklayın. DBeaver bağlanmaya çalışacak ve bir başarı veya hata mesajı görüntüleyecektir. DBeaver ile PostgreSQL’i ilk kez kullanıyorsanız, gerekli JDBC sürücüsünü indirmeniz istenebilir — otomatik olarak devam etmek için Download düğmesine tıklayın.

Adım 6: Bitirin ve Veritabanınızı Yönetmeye Başlayın

Finish düğmesine tıklayın. PostgreSQL bağlantınız sol taraftaki Database Navigator panelinde görünecektir. Artık tabloları göz atabilir, SQL editöründe SQL sorguları çalıştırabilir, verileri içe/dışa aktarabilir ve ER diyagramları oluşturabilirsiniz.

4. PostgreSQL’e Programlı Olarak Bağlanma

Uygulama kodundan PostgreSQL’e bağlanmak en yaygın gerçek dünya kullanım durumlarından biridir. Aşağıda en popüler iki dil için üretim ortamına hazır örnekler verilmiştir: Python ve Node.js.

4.1 Python — psycopg2 Kullanımı

psycopg2 Python için en yaygın olarak kullanılan PostgreSQL adaptörüdür. Hızlı, iş parçacığı güvenli ve Python DB-API 2.0 spesifikasyonuna tam uyumludur.

psycopg2’yi Yükleyin

pip install psycopg2

Kaynaktan derlemenin istenmediği ortamlar için ikili paketi kullanın:

pip install psycopg2-binary

psycopg2 ile PostgreSQL’e Bağlanın

import psycopg2
from psycopg2 import OperationalError

def create_connection():
    connection = None
    try:
        connection = psycopg2.connect(
            user="postgres",
            password="your_password",
            host="127.0.0.1",
            port="5432",
            database="mydb"
        )
        print("Connection to PostgreSQL successful.")
    except OperationalError as e:
        print(f"The error '{e}' occurred.")
    return connection

def execute_query(connection, query):
    cursor = connection.cursor()
    try:
        cursor.execute(query)
        connection.commit()
        print("Query executed successfully.")
    except Exception as e:
        print(f"The error '{e}' occurred.")
    finally:
        cursor.close()

# Establish the connection
conn = create_connection()

# Execute a sample query
if conn:
    execute_query(conn, "SELECT version();")

    # Fetch and display results
    cursor = conn.cursor()
    cursor.execute("SELECT version();")
    record = cursor.fetchone()
    print(f"PostgreSQL server version: {record[0]}")

    # Close the connection
    cursor.close()
    conn.close()
    print("PostgreSQL connection closed.")

psycopg2 ile Bağlantı URI’si Kullanımı

import psycopg2

DATABASE_URL = "postgresql://postgres:your_password@127.0.0.1:5432/mydb"

connection = psycopg2.connect(DATABASE_URL)
cursor = connection.cursor()
cursor.execute("SELECT current_database();")
print(cursor.fetchone())
connection.close()

4.2 Node.js — pg Paketini Kullanımı

node-postgres (pg) paketi Node.js için standart PostgreSQL istemcisidir. Hem geri çağırma tabanlı hem de async/await desenleri destekler ve pg.Pool aracılığıyla bağlantı havuzu desteği içerir.

pg Paketini Yükleyin

npm install pg

Tek bir İstemci Kullanarak Bağlanın (async/await)

const { Client } = require('pg');

const client = new Client({
  host: 'localhost',
  port: 5432,
  user: 'postgres',
  password: 'your_password',
  database: 'mydb',
});

async function connectAndQuery() {
  try {
    await client.connect();
    console.log('Connected to PostgreSQL successfully.');

    const result = await client.query('SELECT version()');
    console.log('PostgreSQL version:', result.rows[0].version);

    const tableResult = await client.query('SELECT * FROM my_table LIMIT 10');
    console.log('Query results:', tableResult.rows);

  } catch (err) {
    console.error('Connection error:', err.message);
  } finally {
    await client.end();
    console.log('PostgreSQL connection closed.');
  }
}

connectAndQuery();

Bağlantı Havuzu Kullanarak Bağlanın (Üretim için Önerilir)

Üretim uygulamaları için, birden fazla eşzamanlı veritabanı bağlantısını verimli bir şekilde yönetmek amacıyla her zaman bir bağlantı havuzu kullanın:

const { Pool } = require('pg');

const pool = new Pool({
  host: 'localhost',
  port: 5432,
  user: 'postgres',
  password: 'your_password',
  database: 'mydb',
  max: 20,               // Maximum number of connections in the pool
  idleTimeoutMillis: 30000,
  connectionTimeoutMillis: 2000,
});

async function queryDatabase(sql, params = []) {
  const client = await pool.connect();
  try {
    const result = await client.query(sql, params);
    return result.rows;
  } catch (err) {
    console.error('Query error:', err.message);
    throw err;
  } finally {
    client.release(); // Always release the client back to the pool
  }
}

// Example usage
(async () => {
  const rows = await queryDatabase('SELECT * FROM my_table WHERE id = $1', [1]);
  console.log(rows);
})();

Node.js ile Bağlantı Dizesi Kullanımı

const { Client } = require('pg');

const client = new Client({
  connectionString: 'postgresql://postgres:your_password@localhost:5432/mydb',
});

client.connect()
  .then(() => client.query('SELECT NOW()'))
  .then(res => console.log('Current time:', res.rows[0]))
  .catch(err => console.error('Error:', err))
  .finally(() => client.end());

5. PostgreSQL Bağlantı Hatalarının Yaygın Örnekleri ve Çözümleri

Deneyimli yöneticiler bile bağlantı sorunlarıyla karşılaşırlar. İşte en yaygın hatalar ve çözümleri:

Hata: FATAL: role "postgres" does not exist

Neden: Belirtilen PostgreSQL kullanıcısı sunucuda mevcut değildir.

Çözüm:

# Create the user via the system's postgres account
sudo -u postgres createuser --superuser postgres

Hata: could not connect to server: Connection refused

Neden: PostgreSQL çalışmıyor veya beklenen ana bilgisayar/bağlantı noktasında dinlemiyor.

Çözüm:

# Start PostgreSQL
sudo systemctl start postgresql

# Verify it is listening on port 5432
sudo ss -tlnp | grep 5432

Ayrıca postgresql.conf kontrol edin ve listen_addresses doğru şekilde yapılandırıldığından emin olun.

Hata: FATAL: pg_hba.conf rejects connection

Neden: pg_hba.conf dosyası bağlantınıza izin veren bir giriş içermez.

Çözüm: /etc/postgresql/<version>/main/pg_hba.conf dosyasını düzenleyin ve uygun bir kural ekleyin:

# Allow local connections with password authentication
host    all             all             127.0.0.1/32            md5

# Allow connections from a specific remote subnet
host    all             all             192.168.1.0/24          md5

Düzenledikten sonra PostgreSQL’i yeniden yükleyin:

sudo systemctl reload postgresql

Hata: FATAL: password authentication failed

Neden: Belirtilen kullanıcı için yanlış parola.

Çözüm: PostgreSQL içinden parolayı sıfırlayın:

ALTER USER postgres WITH PASSWORD 'new_secure_password';

Hata: SSL connection required

Neden: Sunucu SSL/TLS şifreli bir bağlantı gerektirir.

Çözüm: Bağlantı dizenize sslmode=require ekleyin veya SSL’i düzgün şekilde yapılandırın. Veritabanı bağlantılarınızı uçtan uca güvenli hale getirmek için güvenilir bir SSL sertifikasına ihtiyacınız varsa, SSL Sertifikaları göz önünde bulundurun.

6. PostgreSQL Bağlantıları için Güvenlik En İyi Uygulamaları

PostgreSQL bağlantılarınızı güvence altına almak, onları kurmak kadar önemlidir. Her ortamda bu en iyi uygulamaları izleyin:

Güçlü, Benzersiz Parolalar Kullanın

Tüm PostgreSQL kullanıcıları için her zaman güçlü parolalar ayarlayın. Uygulama bağlantıları için varsayılan postgres süper kullanıcısını kullanmaktan kaçının — minimum gerekli ayrıcalıklara sahip özel kullanıcılar oluşturun.

-- Create a dedicated application user with limited privileges
CREATE USER app_user WITH PASSWORD 'StrongP@ssw0rd!2024';
GRANT CONNECT ON DATABASE mydb TO app_user;
GRANT USAGE ON SCHEMA public TO app_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;

Ortam Değişkenleri Yerine .pgpass Dosyasını Kullanın

Parolaları kabuk geçmişinde veya işlem listelerinde açığa çıkarmamak için kimlik bilgilerini güvenli bir şekilde bir .pgpass dosyasında saklayın:

# Create the file
echo "localhost:5432:mydb:postgres:your_password" >> ~/.pgpass

# Set correct permissions (required by PostgreSQL)
chmod 600 ~/.pgpass

Uzak Bağlantılar için Her Zaman SSL/TLS Kullanın

Veritabanı kimlik bilgilerini veya sorgu verilerini hiçbir zaman şifrelenmemiş bağlantılar üzerinden iletmeyin. PostgreSQL’i SSL gerektirmesi için yapılandırın:

# In postgresql.conf
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
# In pg_hba.conf — require SSL for all remote connections
hostssl    all    all    0.0.0.0/0    md5

pg_hba.conf Aracılığıyla Erişimi Kısıtlayın

En az ayrıcalık ilkesini ağ erişimine uygulayın. Yalnızca bilinen, güvenilir IP adresleri veya alt ağlardan bağlantılara izin verin.

Üretimde Bağlantı Havuzlaması Kullanın

PgBouncer gibi araçlar veya pg.Pool (Node.js) içindeki yerleşik havuzlama, yeni bağlantılar kurmanın ek yükünü azaltır ve bağlantı tükenmesi saldırılarına karşı koruma sağlar.

PostgreSQL’i Güncel Tutun

Güvenlik yamaları ve performans iyileştirmelerinden yararlanmak için her zaman PostgreSQL’in en son kararlı sürümünü çalıştırın.

PostgreSQL için Doğru Hosting Ortamını Seçmek

PostgreSQL veritabanınızın performansı ve güvenilirliği, temel altyapıya büyük ölçüde bağlıdır. Dikkate alınması gereken en iyi hosting seçenekleri şunlardır:

  • VPS Hosting — Geliştirme ortamları, küçük ve orta ölçekli üretim veritabanları ve PostgreSQL’i tam olarak gerektiği şekilde yapılandırmak için root erişimine ihtiyaç duyan takımlar için idealdir.
  • Dedicated Servers — Maksimum CPU, RAM ve I/O performansı gerektiren ve kaynak paylaşımı olmayan yüksek trafikli, kaynak yoğun PostgreSQL dağıtımları için en iyi seçimdir.
  • cPanel ile VPS — Bir VPS’nin gücünü, veritabanlarını, kullanıcıları ve sunucu ayarlarını grafik arayüz aracılığıyla yönetmek için kullanımı kolay bir kontrol paneli ile birleştirmek istiyorsanız harika bir seçenektir.

Sonuç

PostgreSQL veritabanına bağlanmak, her geliştirici, veri mühendisi ve sistem yöneticisinin ustalaşması gereken temel bir beceridir. Bu kılavuz, tüm birincil bağlantı yöntemlerini ayrıntılı olarak kapsamıştır:

  • CLI ile psql — Hızlı, güçlü ve PostgreSQL’in kurulu olduğu her yerde kullanılabilir.
  • pgAdmin — Görsel veritabanı yönetimi ve administrasyonu için resmi GUI.
  • DBeaver — Çok sayıda veritabanı sistemini destekleyen çok yönlü, platformlar arası GUI istemcisi.
  • Python (psycopg2) — Python uygulamaları için standart PostgreSQL adaptörü.
  • Node.js (pg) — JavaScript/Node.js ortamlarında PostgreSQL bağlantısı için tercih edilen paket.

Doğru bağlantı yöntemini güçlü güvenlik uygulamaları ve güvenilir bir hosting altyapısı ile birleştirerek, kişisel projelerden kurumsal ölçekli uygulamalara kadar her iş yükü için hazır, güvenli ve yüksek performanslı bir PostgreSQL kurulumuna sahip olacaksınız.