PostgreSQL, kurumsal projelerden açık kaynak uygulamalara kadar geniş bir yelpazede tercih edilen, güçlü ve standartlara sadık bir ilişkisel veritabanı motorudur. Bu motoru yönetmenin en doğrudan yolu ise sunucuya kurulu gelen psql adlı interaktif komut satırı istemcisidir. Görsel araçlar (pgAdmin, DBeaver gibi) rahat olsa da, bir sunucuya SSH ile bağlanıp sorunu yerinde çözmeniz gerektiğinde ya da bir betiği otomatikleştireceğinizde psql sizi asla yarı yolda bırakmaz. Bu yüzden PostgreSQL yöneten herkesin bu aracı akıcı kullanabilmesi gerekir.
Bu rehberde psql kabuğuna nasıl bağlanılacağından başlayıp, veritabanlarını ve tabloları listeleyen ters bölü (backslash) meta komutlarına, SQL sorgusu çalıştırmaya, rol ve yetki yönetimine, parola değiştirmeye ve \i ile dosyadan betik çalıştırmaya kadar günlük yönetim işlerini kıdemli bir sistem yöneticisinin bakış açısıyla adım adım göreceksiniz. MySQL dünyasından geliyorsanız ayrı bir bölümde karşılaştırmalı ipuçları da bulacaksınız. Veritabanı kavramlarına yeniyseniz, önce MySQL / MariaDB temelleri rehberine göz atmanız buradaki mantığı daha rahat oturtmanızı sağlar; çünkü tablo, sorgu ve yetki kavramları her iki motorda da benzer çalışır.
psql Nedir ve Sunucuya Bağlanma#
psql, PostgreSQL ile birlikte gelen terminal tabanlı istemcidir. İki farklı komut dili anlar: standart SQL (SELECT, CREATE TABLE, INSERT gibi) ve yalnızca psql'e özel, ters bölü ile başlayan meta komutlar (\l, \dt, \q gibi). Bu ikisini birbirine karıştırmamak önemlidir; SQL komutları veritabanı motoruna gider ve noktalı virgülle biter, meta komutlar ise doğrudan istemci tarafından yorumlanır ve noktalı virgül istemez.
PostgreSQL'de her şey postgres adlı yönetici (superuser) rolüyle başlar. Bir Linux sunucusunda kuruluma yeni bağlandığınızda, önce sistem kullanıcısına geçip oradan psql başlatmanız gelenekseldir:
sudo -u postgres psql
Bu komut sizi postgres=# biçiminde bir isteme (prompt) düşürür. Buradaki # işareti superuser olduğunuzu, normal bir rolde ise görülecek > işareti sıradan yetkiye sahip olduğunuzu belirtir. Belirli bir veritabanına, kullanıcıya ve sunucuya bağlanmak isterseniz bayrakları açıkça verirsiniz:
psql -h 127.0.0.1 -p 5432 -U uygulama_kullanici -d uygulama_db
Buradaki bayraklar sırasıyla; -h sunucu adresi (host), -p port (varsayılan 5432), -U bağlanılacak rol (user) ve -d veritabanı adıdır. Parola sorulduğunda girersiniz. Betiklerde parolayı her seferinde yazmamak için ev dizininizde ~/.pgpass dosyası kullanılır; satır biçimi host:port:veritabani:kullanici:parola şeklindedir ve dosyanın izni chmod 600 olmalıdır, aksi halde psql güvenlik gereği onu görmezden gelir. Kabuktan çıkmak için ise \q yazarsınız.
Meta Komutlar: psql'in Kestirme Yolları#
psql'i gerçekten verimli kılan şey meta komutlardır. Bir tabloyu görüntülemek için uzun uzun sistem kataloğu sorgusu yazmak yerine, tek bir ters bölü komutuyla aynı sonuca ulaşırsınız. En sık kullanacaklarınızı bir tabloda toplayalım:
| Meta komut | Görevi |
|---|---|
\l | Sunucudaki tüm veritabanlarını listeler |
\c veritabani | Başka bir veritabanına bağlanır (connect) |
\dt | Aktif veritabanındaki tabloları listeler |
\d tablo_adi | Bir tablonun kolon, tip ve indekslerini gösterir |
\du | Rolleri (kullanıcıları) ve yetkilerini listeler |
\dn | Şemaları (schema) listeler |
\df | Fonksiyonları listeler |
\dv | Görünümleri (view) listeler |
\x | Genişletilmiş (dikey) çıktı modunu açar/kapatır |
\timing | Her sorgunun süresini ölçmeyi açar/kapatır |
\? | Tüm meta komutların yardımını gösterir |
\h KOMUT | Bir SQL komutunun söz dizimi yardımını gösterir |
\q | psql'den çıkar |
Pratikte iş akışı genellikle şöyle ilerler. Önce hangi veritabanlarının olduğunu görürsünüz, sonra ilgilendiğiniz veritabanına geçip tablolarına bakarsınız:
postgres=# \l
postgres=# \c uygulama_db
uygulama_db=# \dt
uygulama_db=# \d musteriler
Son satırdaki \d musteriler, musteriler tablosunun tüm kolonlarını, veri tiplerini, NOT NULL kısıtlarını, birincil anahtarını (primary key), yabancı anahtarlarını (foreign key) ve indekslerini tek ekranda gösterir. Bir tablonun yapısını hızlıca anlamanın en pratik yoludur. Çıktı ekrana sığmıyorsa \x ile dikey moda geçmeniz okunabilirliği ciddi biçimde artırır; özellikle çok kolonlu tablolarda her kayıt alt alta listelendiği için satırlar taşmaz.
Bir ayrıntı: küçük harfli \dt yalnızca tabloları, büyük harfli varyantlar ise ek bilgi getirir. Örneğin \dt+ tabloların disk üzerindeki boyutunu da ekler, \l+ her veritabanının boyutunu gösterir. Sonuna eklediğiniz + işareti, çoğu listeleme komutunda "daha fazla ayrıntı" anlamına gelir ve disk kullanımını denetlerken çok işinize yarar.
SQL Sorguları Çalıştırma#
Meta komutlar yapıyı gezmenizi sağlar; asıl veri işleme ise standart SQL ile yapılır. psql içinde SQL komutları noktalı virgülle bittiğinde çalışır. Noktalı virgülü unutursanız psql komutun devam ettiğini varsayar ve isteme bir sonraki satırda uygulama_db-# biçiminde beklemeye devam eder; bu, yeni başlayanların en sık takıldığı noktadır.
Temel bir sorgulama örneğiyle başlayalım. Bir tablodaki kayıtları çekmek için:
SELECT id, ad, eposta FROM musteriler WHERE aktif = true ORDER BY id LIMIT 10;
Yeni kayıt eklemek, güncellemek ve silmek de aynı kabuktan yapılır:
INSERT INTO musteriler (ad, eposta, aktif) VALUES ('Ayşe Yıldız', '[email protected]', true);
UPDATE musteriler SET aktif = false WHERE id = 42;
DELETE FROM musteriler WHERE aktif = false;
Yeni bir veritabanı ve tablo oluşturmak da doğrudan psql içinden mümkündür. PostgreSQL'de karakter kümesi olarak neredeyse her zaman UTF-8 seçilir; Türkçe karakterlerin sorunsuz saklanması için bu önemlidir:
CREATE DATABASE magaza WITH ENCODING 'UTF8';
\c magaza
CREATE TABLE urunler (
id SERIAL PRIMARY KEY,
ad VARCHAR(200) NOT NULL,
fiyat NUMERIC(10,2) NOT NULL DEFAULT 0,
olusturma TIMESTAMPTZ DEFAULT now()
);
Burada dikkat çeken birkaç PostgreSQL özelliği var. SERIAL, otomatik artan bir tamsayı üretir (MySQL'deki AUTO_INCREMENT'in karşılığı). NUMERIC(10,2) para gibi ondalık değerler için kayıpsız tiptir; para tutarlarını asla FLOAT ile saklamayın çünkü yuvarlama hataları oluşur. TIMESTAMPTZ ise zaman dilimi bilgisini de tutan tarih-saat tipidir ve sunucularınız farklı bölgelerdeyse hayat kurtarır.
Uzun bir sorguyu ekrana sığmayacak kadar geniş bir sonuçla çalıştırdığınızda, çıktı bir sayfalayıcıya (pager) düşer; ok tuşlarıyla gezip q ile çıkarsınız. Sorgunun ne kadar sürdüğünü merak ediyorsanız, çalıştırmadan önce \timing yazmanız her sorgunun altına milisaniye cinsinden süre ekler. Performans sorunlarını teşhis ederken bu, EXPLAIN ANALYZE ile birlikte ilk başvuracağınız araçtır.
Kullanıcı (Rol) ve Yetki Yönetimi#
PostgreSQL'de "kullanıcı" ve "grup" kavramları tek bir soyutlamada birleşmiştir: rol (role). Bir rol, giriş yapabilen bir kullanıcı de olabilir, yetkileri toplayan bir grup da. Yeni bir uygulama için tipik olarak, o uygulamaya özel, sınırlı yetkili bir rol oluşturursunuz; asla uygulamayı postgres superuser'ı ile bağlamazsınız. Bu, güvenliğin temel taşıdır.
Yeni bir rol oluşturmak ve ona bir parola vermek için:
CREATE ROLE uygulama_kullanici WITH LOGIN PASSWORD 'guclu-bir-parola';
LOGIN anahtar kelimesi bu rolün giriş yapabileceğini belirtir; onu vermezseniz rol yalnızca yetki grubu olarak kullanılır. Şimdi bu role belirli bir veritabanı üzerinde çalışma izni verelim. Yetki verme komutu GRANT, geri alma komutu ise REVOKE'tur:
-- Veritabanina baglanma izni
GRANT CONNECT ON DATABASE magaza TO uygulama_kullanici;
-- Semadaki nesneleri kullanma izni
GRANT USAGE ON SCHEMA public TO uygulama_kullanici;
-- Tek bir tabloda okuma-yazma izni
GRANT SELECT, INSERT, UPDATE, DELETE ON urunler TO uygulama_kullanici;
-- Semadaki tum tablolar icin ayni izin
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO uygulama_kullanici;
Buradaki incelik şudur: GRANT ... ON ALL TABLES yalnızca o an var olan tablolara izin verir. Sonradan yeni bir tablo oluşturursanız, o tablo bu izinlerin dışında kalır. Gelecekte oluşturulacak tablolara da otomatik izin tanımlamak için "varsayılan yetkiler" (default privileges) mekanizmasını kullanırsınız:
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO uygulama_kullanici;
Bir yetkiyi geri almak da simetriktir. Örneğin bir rolün silme yetkisini kaldırmak isterseniz:
REVOKE DELETE ON urunler FROM uygulama_kullanici;
En az yetki ilkesine (principle of least privilege) sadık kalmak, veritabanı güvenliğinin özüdür: her rol yalnızca işini yapması için gereken izinlere sahip olmalı, fazlasına değil. Bu yaklaşım, bir uygulama kodu ele geçirilse bile hasarı sınırlar. Sunucu güvenliği tarafını bir bütün olarak ele almak isterseniz, WAF ve DDoS koruma hizmetlerimiz uygulama katmanını da tamamlar.
Parola Değiştirme ve Kimlik Doğrulama#
Rollerin parolalarını yönetmek günlük işlerin bir parçasıdır. Bir rolün parolasını psql içinden değiştirmenin en temiz yolu ALTER ROLE komutudur:
ALTER ROLE uygulama_kullanici WITH PASSWORD 'yeni-daha-guclu-parola';
Kendi parolanızı, yani o an bağlı olduğunuz rolün parolasını değiştirmek için ise \password meta komutu daha güvenlidir. Çünkü bu komut parolayı ekranda göstermez ve komut geçmişine (history) düşürmez; ayrıca istemci tarafında güvenli biçimde şifreleyip sunucuya iletir:
uygulama_db=> \password
Komutu yazdığınızda psql sizden yeni parolayı iki kez ister ve hiçbirini ekrana yansıtmaz. Üretim ortamında parola değiştirirken ALTER ROLE ... PASSWORD 'metin' yazmak, parolanın hem terminal geçmişinde hem de sunucu günlüklerinde açık metin olarak kalması riskini taşır; bu yüzden mümkün olduğunda \password tercih edilmelidir.
Kimlik doğrulama yönteminin kendisi ise pg_hba.conf dosyasında belirlenir. Bu dosya, "hangi kullanıcı, hangi veritabanına, nereden, nasıl bağlanabilir" kurallarını satır satır tutar. Tipik bir güvenli yapılandırmada yerel bağlantılar için scram-sha-256 yöntemi kullanılır:
# TYPE DATABASE USER ADDRESS METHOD
local all all scram-sha-256
host magaza uygulama_kullanici 127.0.0.1/32 scram-sha-256
Bu dosyada değişiklik yaptıktan sonra PostgreSQL'in yapılandırmayı yeniden okuması gerekir; sunucuyu tamamen durdurmadan sudo systemctl reload postgresql komutuyla bunu yaparsınız. Uzaktan bağlantı açacaksanız, postgresql.conf içindeki listen_addresses ayarını da düzenlemeniz gerekir; ancak veritabanını internete tümüyle açmak yerine yalnızca güvendiğiniz IP'lere izin vermek, sağlam bir güvenlik alışkanlığıdır.
\i ile Betik Çalıştırma ve Toplu İşlemler#
Elle tek tek komut yazmak küçük işler için yeterlidir, ancak bir şema kurulumu, veri aktarımı ya da düzenli bakım söz konusu olduğunda komutları bir .sql dosyasında toplayıp topluca çalıştırmak çok daha güvenli ve tekrarlanabilirdir. psql içinde bir dosyayı çalıştırmak için \i meta komutunu kullanırsınız:
uygulama_db=# \i /home/deploy/sema.sql
Bu komut, belirtilen dosyadaki tüm SQL ifadelerini sırayla yürütür. Kurulum betiklerini, migration'ları ya da toplu güncellemeleri bu şekilde çalıştırmak, aynı işlemi farklı sunucularda birebir tekrarlayabilmenizi sağlar. Alternatif olarak, kabuğa hiç girmeden doğrudan terminalden de bir betik çalıştırabilirsiniz; otomasyon betiklerinde en çok bu yöntem kullanılır:
psql -U uygulama_kullanici -d magaza -f /home/deploy/sema.sql
Toplu işlemlerde kritik bir konu işlem (transaction) yönetimidir. Birden fazla komutun ya tamamının ya da hiçbirinin uygulanmasını istiyorsanız, komutları BEGIN ve COMMIT arasına alırsınız. Ortada bir hata çıkarsa ROLLBACK ile her şeyi geri alabilirsiniz:
BEGIN;
UPDATE hesaplar SET bakiye = bakiye - 100 WHERE id = 1;
UPDATE hesaplar SET bakiye = bakiye + 100 WHERE id = 2;
COMMIT;
Bu örnekte iki güncelleme bir bütün olarak ele alınır; ilki başarılı olup ikincisi başarısız olursa, COMMIT yerine ROLLBACK çalıştırarak parayı havada bırakmaktan kaçınırsınız. Betikleri çalıştırırken hataların işlemi durdurmasını istiyorsanız, psql'i -v ON_ERROR_STOP=1 bayrağıyla başlatmak akıllıcadır; aksi halde bir satır hata verse bile betik alttaki komutları çalıştırmaya devam eder ve yarım kalmış bir duruma yol açabilir.
Yedek Alma ve Geri Yükleme#
Hiçbir veritabanı yönetimi düzenli yedek olmadan tamamlanmış sayılmaz. PostgreSQL'de mantıksal yedek için pg_dump, geri yükleme için psql ya da pg_restore kullanılır. Bu araçlar psql'in kendisi değildir ama onunla iç içe çalışır ve her yöneticinin ezbere bilmesi gereken komutlardır.
Tek bir veritabanının düz metin (SQL) yedeğini almak için:
pg_dump -U uygulama_kullanici -d magaza -F p -f magaza_yedek.sql
Buradaki -F p (plain) düz SQL biçiminde çıktı üretir; bu dosyayı doğrudan psql ile geri yükleyebilirsiniz. Daha büyük veritabanlarında sıkıştırılmış özel biçim (-F c) tercih edilir, çünkü pg_restore ile seçici (örneğin yalnızca belirli tabloları) geri yükleme imkânı tanır:
pg_dump -U uygulama_kullanici -d magaza -F c -f magaza_yedek.dump
Geri yükleme tarafında biçime göre araç değişir. Düz SQL yedeğini geri yüklemek için psql, özel biçimli yedeği geri yüklemek için pg_restore kullanılır:
# Duz SQL yedegini geri yukleme
psql -U uygulama_kullanici -d magaza_yeni -f magaza_yedek.sql
# Ozel bicimli yedegi geri yukleme
pg_restore -U uygulama_kullanici -d magaza_yeni magaza_yedek.dump
Sunucudaki tüm veritabanlarını, rolleri ve yetkileri bir arada yedeklemek isterseniz pg_dumpall kullanırsınız; bu, sunucu taşırken ya da felaket kurtarma senaryolarında paha biçilmezdir. Yedeklerinizi düzenli olarak alıp farklı bir sunucuda saklamak, veritabanı yönetiminin altın kuralıdır; disk arızası, yanlış DELETE komutu ya da bir güvenlik olayı anında tek güvenceniz odur. Bu süreci elle takip etmek istemiyorsanız, Clou.TR'nin yedekleme çözümleri düzenli ve otomatik yedeği devralır; site ya da sunucu taşıması gerektiğinde de site taşıma hizmetimiz veritabanı aktarımını sizin yerinize yürütür.
MySQL'den PostgreSQL'e Geçiş İpuçları#
MySQL veya MariaDB dünyasından geliyorsanız, PostgreSQL'in mantığı büyük ölçüde tanıdık gelir ama bazı komut ve terim farkları ilk başta şaşırtabilir. En sık takılınan noktaları bir karşılaştırma tablosunda toplayalım:
| İşlem | MySQL (mysql) | PostgreSQL (psql) |
|---|---|---|
| Veritabanlarını listele | SHOW DATABASES; | \l |
| Veritabanı seç | USE db; | \c db |
| Tabloları listele | SHOW TABLES; | \dt |
| Tablo yapısını gör | DESCRIBE tablo; | \d tablo |
| Kullanıcıları listele | SELECT user FROM mysql.user; | \du |
| Otomatik artan alan | AUTO_INCREMENT | SERIAL / IDENTITY |
| Kabuktan çık | exit / quit | \q |
| Metin birleştirme | CONCAT(a, b) | `a |
En önemli kavramsal fark, PostgreSQL'de yapı komutlarının (listeleme, tablo yapısı görme) SQL değil, ters bölü meta komutları olmasıdır. MySQL'de SHOW TABLES; bir SQL sorgusudur; PostgreSQL'de karşılığı olan \dt ise istemci komutudur ve noktalı virgül istemez. Ayrıca PostgreSQL, tanımlayıcıları (tablo, kolon adları) çift tırnakla, metin değerleri ise tek tırnakla belirtme konusunda MySQL'den daha katıdır; WHERE ad = "Ali" yazarsanız PostgreSQL bunu bir kolon adı sanır ve hata verir. Doğrusu WHERE ad = 'Ali' biçiminde tek tırnaktır.
Bir diğer alışkanlık farkı büyük/küçük harf duyarlılığıdır. PostgreSQL, çift tırnak içine almadığınız tüm tanımlayıcıları küçük harfe çevirir; bu yüzden tablo ve kolon adlarınızı baştan küçük harfli ve alt çizgili (musteri_adres gibi) tutmak, ileride yaşanacak birçok karışıklığı önler. phpMyAdmin gibi görsel araçlara alışkınsanız, PostgreSQL tarafında benzer işlevi pgAdmin sağlar; ancak sunucu düzeyinde iş yaparken komut satırının hızına ve güvenilirliğine alışmak uzun vadede size zaman kazandırır. Görsel araç mantığını phpMyAdmin rehberimizde inceleyebilirsiniz.
Günlük İş Akışı ve İyi Alışkanlıklar#
Deneyimli yöneticilerin psql kullanımını hızlandıran birkaç pratik ayar vardır. İlki, çıktı biçimini duruma göre değiştirmektir. Tek satırda birçok kolonu olan sorgular ekrana taşıyorsa, \x auto yazmanız çıktının genişliğine göre otomatik olarak dikey moda geçmesini sağlar; kısa çıktılarda tablo, uzun çıktılarda dikey görünüm alırsınız.
İkincisi, sık kullandığınız ayarları ev dizininizdeki ~/.psqlrc dosyasına yazmaktır. Böylece her psql başlattığınızda bu ayarlar otomatik yüklenir:
\set QUIET 1
\timing on
\x auto
\set PROMPT1 '%n@%/%R%# '
\pset null '(bos)'
Bu yapılandırma; her sorgunun süresini gösterir, uygun durumda dikey çıktıya geçer, istem satırında hangi kullanıcı ve veritabanında olduğunuzu belirtir ve NULL değerleri boş yerine (bos) olarak göstererek gerçek boş metinlerle karıştırılmasını önler. Üretim sunucusunda çalışırken hangi veritabanına bağlı olduğunuzu istemde görmek, yanlış veritabanında komut çalıştırma kazalarını ciddi biçimde azaltır.
Üçüncüsü, komut geçmişini kullanmaktır. Yukarı ok tuşuyla önceki komutları çağırabilir, \e ile son komutu varsayılan metin düzenleyicinizde (nano, vim gibi) açıp uzun bir sorguyu rahatça düzenleyebilirsiniz. Bu araçlar birlikte, komut satırını görsel bir arayüz kadar konforlu hale getirir. Kendi PostgreSQL sunucusunu yönetmek istemeyen ekipler için ise Clou.TR'nin yönetimli sunucu hizmeti, kurulumdan yedeklemeye tüm veritabanı bakımını devralır.
Sıkça Sorulan Sorular#
psql'de meta komut ile SQL komutu arasındaki fark nedir?#
Meta komutlar ters bölü ile başlar (\l, \dt, \q gibi) ve doğrudan psql istemcisi tarafından yorumlanır; noktalı virgül gerektirmezler ve veritabanını gezmek, listelemek gibi işler için kullanılırlar. SQL komutları ise (SELECT, INSERT, CREATE gibi) veritabanı motoruna gönderilir ve mutlaka noktalı virgülle bitmelidir. İkisini karıştırmamanın en pratik yolu şudur: yapıyı görüntülüyorsanız ters bölü, veriyle işlem yapıyorsanız SQL kullanırsınız.
Bir tablonun kolonlarını ve yapısını nasıl görürüm?#
Bunun için \d tablo_adi meta komutunu kullanırsınız; örneğin \d musteriler yazdığınızda o tablonun tüm kolonları, veri tipleri, NOT NULL kısıtları, birincil ve yabancı anahtarları ile indeksleri tek ekranda listelenir. MySQL'deki DESCRIBE tablo; komutunun karşılığıdır. Daha fazla ayrıntı, örneğin tablonun disk boyutu için \dt+ komutunu kullanabilirsiniz.
Bir kullanıcıya yalnızca okuma yetkisi nasıl veririm?#
Önce ilgili veritabanına bağlanma ve şemayı kullanma izni, ardından yalnızca SELECT yetkisi verirsiniz. Sırasıyla GRANT CONNECT ON DATABASE magaza TO okuyucu;, GRANT USAGE ON SCHEMA public TO okuyucu; ve GRANT SELECT ON ALL TABLES IN SCHEMA public TO okuyucu; komutlarını çalıştırmanız yeterlidir. Sonradan oluşturulacak tablolara da otomatik okuma izni için ALTER DEFAULT PRIVILEGES komutunu eklemeniz gerekir, çünkü ON ALL TABLES yalnızca o an var olan tablolara etki eder.
psql'den nasıl çıkarım?#
Kabuktan çıkmak için \q yazıp Enter'a basmanız yeterlidir. MySQL'e alışkınsanız exit veya quit yazma refleksiniz olabilir; modern PostgreSQL sürümleri bu iki komutu da anlayıp çıkışı gerçekleştirir, ancak asıl ve her sürümde çalışan doğru komut \q'dur. Uzun bir sorgu çıktısının içindeki sayfalayıcıdan çıkmak için ise ayrıca q tuşuna basarsınız.
Bir SQL dosyasını psql ile nasıl çalıştırırım?#
İki yolu vardır. Zaten psql kabuğunun içindeyseniz \i /yol/dosya.sql yazarak dosyadaki tüm komutları sırayla çalıştırırsınız. Kabuğa hiç girmeden, doğrudan terminalden çalıştırmak isterseniz psql -U kullanici -d veritabani -f /yol/dosya.sql komutunu kullanırsınız; bu yöntem özellikle otomasyon ve kurulum betiklerinde tercih edilir. Betikte bir hata çıktığında işlemin durmasını istiyorsanız komuta -v ON_ERROR_STOP=1 bayrağını eklemeyi unutmayın.
PostgreSQL yedeğini nasıl alıp geri yüklerim?#
Yedek almak için pg_dump -U kullanici -d veritabani -F c -f yedek.dump komutunu kullanırsınız; bu, sıkıştırılmış özel biçimde bir yedek üretir. Geri yüklerken düz SQL yedeğini psql -d hedef_db -f yedek.sql, özel biçimli yedeği ise pg_restore -d hedef_db yedek.dump ile açarsınız. Tüm sunucuyu (roller ve yetkiler dâhil) yedeklemek için pg_dumpall kullanılır. Yedeklerinizi mutlaka farklı bir sunucuda saklayın.
Kapanış#
psql, ilk bakışta birkaç ters bölü komutundan ibaret gibi görünse de aslında PostgreSQL yönetiminin en güçlü ve en güvenilir aracıdır. Bağlanmayı, meta komutlarla yapıyı gezmeyi, SQL ile veriyi işlemeyi, rol ve yetkileri en az yetki ilkesine göre kurmayı, parolaları güvenle değiştirmeyi ve düzenli yedek almayı içselleştirdiğinizde, veritabanı yönetimi bir belirsizlik kaynağı olmaktan çıkıp öngörülebilir bir rutine dönüşür. MySQL'den geliyorsanız da göreceğiniz gibi mantık aynıdır; yalnızca komutların adları ve birkaç alışkanlık değişir.
Bu bilgileri gerçek bir altyapıda uygulamaya geçmek isterseniz, Clou.TR olarak size uygun zemini sunuyoruz. Tam kök (root) erişimiyle kendi PostgreSQL sunucunuzu özgürce kurup yönetebileceğiniz sanal sunucu ve VDS çözümlerimizi inceleyebilir, tüm sunucu ürünlerine göz atabilirsiniz. Kurulum, güncelleme ve yedekleme yükünü uzman ekibimize bırakmak isterseniz sunucu yönetimi hizmetimiz ve yedekleme çözümlerimiz devreye girer. Paylaşımlı bir ortamda hızlı başlamak istiyorsanız hosting paketlerimiz de veritabanı destekli projeleriniz için hazır bir başlangıç noktası sunar.