macOS, CentOS ve Ubuntu Üzerinde PostgreSQL Kurulumu ve Türkçe Karakter Hatasının Giderilmesi

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 updateKurulum:
$ brew install postgresqlkomutu 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-databaseServisin bilgisayarın açılışında otomatik çalıştırılması için:
$ brew services start postgresqlServisi şimdi çalıştırmak için:
$ brew services start postgresqlDurdurmak için:
$ brew services stop postgresqlYeniden başlatmak için:
$ brew services restart postgresqlHatı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 stoppedCentOS’a PostgreSQL kurulumu
Yum Repolarının güncel olduğundan emin olalım:
$ sudo yum updateKurulum:
$ sudo yum install postgresql-server postgresql-contribPostgreSQL’i devreye alma:
$ sudo postgresql-setup initdbServisi Başlatma:
$ sudo systemctl start postgresqlServisin bilgisayarın açılışında otomatik çalıştırılması için:
$ sudo systemctl enable postgresqlDurdurmak için:
$ sudo systemctl stop postgresqlYeniden başlatmak için:
$ sudo systemctl restart postgresqlUbuntu’ya PostgreSQL kurulumu
APT Repolarının güncel olduğundan emin olalım:
$ sudo apt-get updateKurulum:
$ sudo apt-get install postgresql postgresql-contribServisi Başlatma:
$ sudo systemctl start postgresqlServisin bilgisayarın açılışında otomatik çalıştırılması için:
$ sudo systemctl enable postgresqlDurdurmak için:
$ sudo systemctl stop postgresqlYeniden başlatmak için:
$ sudo systemctl restart postgresqlKurulum 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 postgresKarşı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 veritabanının kullanıcılarını listeleyeyim:
Bu komut size aşağıdakine benzer bir çıktı oluşturacaktır:
List of rolesRole name | Attributes | Member of
-----------+---------------------------------------------+----------
homestead | Create DB | {}
sineld | Superuser, Create role, Create DB, RLS | {}
PostgreSQL komut satırından çıkış yapalım:
Oluşturmuş olduğumuz homestead kullanıcısı ile giriş yapalım:
$ psql postgres -U homesteadproject1 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 destekli Türkçe karakter seti tanımlaması gerekecektir:
$ ERROR: invalid locale name: "tr_TR.UTF-8"Sorunun giderilmesi
macOS için;
Kullandığınız , ~/.bash_profile veya içine aşağıdaki satırları ekleyin:
export LC_ALL=tr_TR.UTF-8
export LANG=tr_TR.UTF-8Centos ve Ubuntu için;
$ sudo locale-gen tr_TR
$ sudo locale-gen tr_TR.UTF-8
$ sudo update-localeArdından PostgreSQL servisini yeniden bağlatalım:
MacOS için:
$ brew services restart postgresqlCentos / Ubuntu için:
$ sudo systemctl restart postgresqlVeritabanını oluşturma komutunu tekrar çalıştırınız.
Veritabanlarımızı listeleyelim:
Bu komut size aşağıdakine benzer bir çıktı oluşturacaktır:
List of databasesName | 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 karakter destekli project1 veritabanına bağlanalım:
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ı listelerUzunca 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 :)
Originally published at https://www.sinaneldem.com.tr on November 4, 2019.
