Merhaba arkadaşlar,
Uzun zamandır PostgreSQL ile ilgili kaynakları bir araya getirip bir makale yazmayı düşünüyordum, nasip bugüneymiş.
PostgreSQL bildiğiniz üzere birçok açıdan benzer veritabanı sistemlerden daha fazla artıya sahiptir. SaaS (Software as a Service, hizmet olarak yazılım) bir uygulamamız için veritabanı tercihi olarak PostgreSQL kullanmakta karar kıldık.
Bu makalede macOs, Centos ve Ubuntu üzerine kurulumu, kullanıcı (rol) ve veritabanı oluşturulmasına ilişkin komutları bulacaksınız.
Makinemize, son sürüm olan PostgreSQL 11.5 kurulumunu anlatacağız.
PostgreSQL Kurulumu
MacOS’a PostgreSQL kurulumu
Sisteminizde Homebrew kurulu olduğunu varsayarsak (değilse buradan gerekli yönergeleri takip ederek kurabilirsiniz);
Brew Repolarının güncel olduğundan emin olalım:
brew update
Kurulum:
brew install postgresql
komutu ile PostgreSQL’in kurulumu yapılır.
(Opsiyonel) Makinenizde eski bir sürüm yüklü ise bu komutla mevcut veritabanlarınızın yükseltilmesini sağlayabilirsiniz:
brew postgresql-upgrade-database
Servisin bilgisayarın açılışında otomatik çalıştırılması için:
brew services start postgresql
Servisi şimdi çalıştırmak için:
brew services start postgresql
Durdurmak için:
brew services stop postgresql
Yeniden başlatmak için:
brew services restart postgresql
Hatırlatma Açılışta başlaması ve şimdi çalıştırmak için komutlarının aynı (brew services start postgresql) olduğu dikkatinizi çekti mi? macOS’ta çalıştır komutunu verdiğiniz zaman tekrar durdur demediğiniz sürece servis açılışta otomatik çalıştırılacaktır. Bu durum stop için de geçerlidir. Durdurduğunuz servis açlışta tekrar devreye girmez.
Açılışta çalışması için farklı yöntemler de vardır ancak bu makalenin konusu olmadığından buna burada değinmeyeceğim.
brew services list komutu ile şu anda yüklü olan servisler ve durumları hakkında bilgi sahibi olabilirsiniz. bu komut size aşağıdakine benzer bir çıktı oluşturacaktır:
Name Status User Plist
beanstalkd started
dnsmasq started
nginx started
php started
postgresql started
redis started
unbound stopped
CentOS’a PostgreSQL kurulumu
Yum Repolarının güncel olduğundan emin olalım:
sudo yum update
Kurulum:
sudo yum install postgresql-server postgresql-contrib
PostgreSQL’i devreye alma:
sudo postgresql-setup initdb
Servisi Başlatma:
sudo systemctl start postgresql
Servisin bilgisayarın açılışında otomatik çalıştırılması için:
sudo systemctl enable postgresql
Durdurmak için:
sudo systemctl stop postgresql
Yeniden başlatmak için:
sudo systemctl restart postgresql
Ubuntu’ya PostgreSQL kurulumu
APT Repolarının güncel olduğundan emin olalım:
sudo apt-get update
Kurulum:
sudo apt-get install postgresql postgresql-contrib
Servisi Başlatma:
sudo systemctl start postgresql
Servisin bilgisayarın açılışında otomatik çalıştırılması için:
sudo systemctl enable postgresql
Durdurmak için:
sudo systemctl stop postgresql
Yeniden başlatmak için:
sudo systemctl restart postgresql
Kurulum Sonrası İşlemler
PostgreSQL veritabanı sunucusu kurulduktan sonra, varsayılan olarak, postgres rolüne sahip, postgres adında bir kullanıcı ve ayrıca postgres adı verilen bir sistem hesabı oluşturur. PostgreSQL sunucusuna bağlanmak için sisteminize postgres kullanıcısu olarak giriş yapın ve veritabanına bağlanın.
Veritabanına bağlanma
psql postgres
Karşınıza PostgreSQL’in komut aracı çıkacaktır:
psql (11.5)
Type "help" for help.
postgres=#
Sisteme homestead adında, secret şifresine sahip bir kullanıcı ekleyeceğim.
CREATE ROLE homestead WITH LOGIN PASSWORD 'secret';
Oluşturmuş olduğum bu homestead adındaki kullanıcıya veritabanı oluşturma yetkisi / rolü vereceğim:
ALTER ROLE homestead CREATEDB;
Bu veritananının kullanıcılarını listeleyeyim:
\du
Bu komut size aşağıdakine benzer bir çıktı oluşturacaktır:
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
homestead | Create DB | {}
sineld | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
PostgreSQL komut satırından çıkış yapalım:
\q
Oluşturmuş olduğumuz homestead kullanıcısı ile giriş yapalım:
psql postgres -U homestead
project1 isminde Türkçe karakter destekli bir veritabanı oluşturalım:
CREATE DATABASE project1 ENCODING='UTF-8' LC_COLLATE = 'tr_TR.UTF-8' LC_CTYPE='tr_TR.UTF-8' TEMPLATE template0;
Dikkat Bu komut size aşağıdakine benzer bir hata verirse sisteme UTF-8 deskteli Türkçe karakter seti tanımlaması gerekecektir:
ERROR: invalid locale name: "tr_TR.UTF-8"
Sorunun giderilmesi
macOS için;
Kullanıdığınız ~/.profile, ~/.bash_profile veya ~/.zshrc içine aşağıdaki satırları ekleyin:
export LC_ALL=tr_TR.UTF-8
export LANG=tr_TR.UTF-8
Centos ve Ubuntu için;
sudo locale-gen tr_TR
sudo locale-gen tr_TR.UTF-8
sudo update-locale
Ardından PostgreSQL servisini yeniden bağlatalım:
MacOS için:
brew services restart postgresql
Centos / Ubuntu için:
sudo systemctl restart postgresql
Veritabanını oluşturma komutunu tekrar çalıştırınız.
Veritabanlarımızı listeleyelim:
\l
Bu komut size aşağıdakine benzer bir çıktı oluşturacaktır:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-----------+----------+-------------+-------------+-------------------
project1 | homestead | UTF8 | tr_TR.UTF-8 | tr_TR.UTF-8 |
postgres | sineld | UTF8 | C | C |
template0 | sineld | UTF8 | C | C | =c/sineld +
| | | | | sineld=CTc/sineld
template1 | sineld | UTF8 | C | C | =c/sineld +
| | | | | sineld=CTc/sineld
(6 rows)
Oluşturduğumuz Türkçe kararkter destekli project1 veritabanına bağlanalım:
\c project1;
Bu komut size aşağıdakine benzer bir çıktı oluşturacaktır:
You are now connected to database "project1" as user "homestead".
project1=#
Türkçe karakterlerimizin testini yapalım:
SELECT
harf, upper(harf)
FROM (
VALUES ('ş'), ('t'), ('u'), ('a'), ('n'), ('o'), ('ö'), ('p'), ('f'), ('g'), ('ğ'), ('h'), ('ı'), ('i'), ('j'), ('k'), ('l'), ('m'), ('ü'), ('v'), ('r'), ('s'), ('b'), ('c'), ('ç'), ('d'), ('e'), ('y'), ('z')) AS
alfabe(harf)
ORDER BY 1;
Bu komut postgresql mesaj panosu‘dan alınmıştır.
Bu komut size aşağıdakine benzer bir çıktı oluşturacaktır:
harf | upper
------+-------
"a" "A"
"b" "B"
"c" "C"
"ç" "Ç"
"d" "D"
"e" "E"
"f" "F"
"g" "G"
"ğ" "Ğ"
"h" "H"
"ı" "I"
"i" "İ"
"j" "J"
"k" "K"
"l" "L"
"m" "M"
"n" "N"
"o" "O"
"ö" "Ö"
"p" "P"
"r" "R"
"s" "S"
"ş" "Ş"
"t" "T"
"u" "U"
"ü" "Ü"
"v" "V"
"y" "Y"
"z" "Z"
(29 rows)
macOS işletim sisteminizin yerel dili Türkçe değilse, sıralama farklı olabilir. Araştırmalarıma göre unix sistem spesifik bir sorun olarak bu durumla karşılaşabilirsiniz. Linux’ta locale-gen yaptığınız takdirde bu sorunla karşılaşmayacaksınız.
En çok ihtiyaç duyacağınız PostgreSQL komutları şunlardır:
\q : Çıkış
\c __veritabanı__ : veritabanı isimli veritabanına bağlantı yapar
\d __table__ : table isimli tablo hakkında açıklama (triggerları içerir)
\d+ __table__ : table isimli tablo hakkında daha fazla açıklamal (disk boyutu kullanımı)
\l : Veritabanlarını listeler
\dy : Olayları listeler
\df : Fonksiyonları listeler
\di : Indexleri listeler
\dn : Şemaları listeler
\dt *.* : Tüm şemaların tüm tablolarını listeler
\dT+ : Tüm veri tipleri listeler
\dv : Görünümleri listeler
\df+ __function__ : Fonksiyonun SQL kodunu gösterir.
\x : Sorgu sonuçlarını, çirkin ASCII tablolar yerine güzelleştirerek döker
\du : Kullanıcıları listeler
\du __kullanıcı__ : Eğer mevcutsa kullanıcıyı listeler
Uzunca bir makalenin sonuna geldik.
Bu konuda bir otorite olmadığım ve paylaştıklarımın yeni öğrenen birine ait; hem kendisine, hem de kendisi gibi yeni başlayanlara referans bilgiler olması açısından hazırlandığı göz önünde bulundurulmalıdır.
Eksik veya yanlış bir bilgi ie karşılaşırsanız lütfen aşağıdaki yorum kısmından paylaşın.
Keyifli PostgreSQL’lemeler dilerim :)