Düzeltme Öner

Paket Yönetim Sistemi ile Kurulum

PostgreSQL farklı majör sürümleri farklı depolarda tutulur. Kurulacak sürüme göre o deponun paketi seçilip kurulur (bkz.). RPM paket deposunun edinilmesi:

$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
  PostgreSQL Paketleri
postgresql13.x86_64 PostgreSQL istemcisi ve kütüphaneleri
postgresql13-contrib.x86_64 PostgreSQL ile beraber opsiyonel kurulabilecek eklentiler.
postgresql13-devel.x86_64 PostgreSQL geliştirici kütüphaneleri
postgresql13-libs.x86_64 PostgreSQL istemcileri ve sunucu tarafından paylaşılan ortak kütüphaneler
postgresql13-server.x86_64 PostgreSQL sunucusu

PostgreSQL sunucunun kurulumu:

$ yum install postgresql13-server postgresql13-contrib

Kurulumun tamamlamasından sonra PostgreSQL sunucu istemci programları ve eklentiler kurulur. Veri dizini boş olarak oluşturulmuş ve kurulum ile birlikte gelen postgres sistem kullanıcısına verilmiş durumdadır. Kurulumdan sonra standart ayarlarla PostgreSQL ayağa kaldırılabilir. Ancak önce VTnin bir seferliğine ilklendirilmesi (initialize) gerekir. İlklendirme işlemi şu şekildedir:

/usr/pgsql-1/bin/postgresql-13-setup initdb

İlklendirme işlemiyle catalog cluster (database cluster) ya da veritabanı kümesi oluşutulur. PostgreSQL’in veri dizininde dosyaların oluştuğunu görürüz:

ls -la /var/lib/pgsql/13/data

İlklendirme sırasında catalog cluster’ın varsayılan “locale” değerleri de belirlenir. Veri dizini olarak başka bir yer seçip ilklendirmeyi oraya yapmak da mümkündür. Veri dizinini “ / “ bölümünden farklı bir bölümde konumlandırmak iyidir.

PostgreSQL sunucuyu ayağa kaldırma:

systemctl start postgresql-13

Sistem açılışında otomatik başlamasını sağlama:

systemctl enable postgresql-13

Servis betikleri dışında yöntemlerle de PostgreSQL başlatılabilir ama önerilen her zaman servis betiklerini kullanmaktır:

/usr/pgsql-13/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/pgsql-13/bin/pg_ctl start -l logfile
su postgres -c '/usr/pgsql-13/bin/pg_ctl start -D \
             /usr/local/pgsql/data -l serverlog'

Sunucunun ayağa kalktığı, loglar izlenerek takip edilir. Sunucu ilklendirme logları /var/lib/pgsql/13/initdb.log dosyasına yazılır. Sonraki zamanlarda ise log dosyaları log dizininde gün ekiyle tutulacaktır:

ls -l /var/lib/pgsql/13/data/log
total 4
-rw....--- 1 postgres postgres 3738 May 26 14:05 postgresql-Fri.log

PostgreSQL Sunucu Ayarları

PostgreSQL varsayılan ayarlarına dokunulmadan ayağa kaldırılabilir. Ayar değişiklikleri için değiştirilecek temel ayar dosyası: /var/lib/pgsql/13/data/postgresql.conf

Ayarların çoğu reload ile aktifleşir, restart gerektirenler dosyada belirtilmiştir. PostgreSQL reload edildiğinde servis kesintisi yapılmadan ayar dosyasındaki değişiklikler tekrar okunur. Mevcut bağlantıların düşmesine neden olmayacağı için restart gerektiren özel parametrelerin değişimi hariç tüm durumlarda reload tercih edilmelidir.

systemctl reload postgresql-13

Ayar dosyalarında “#” ile başlayan yorum satırları her bir parametrenin öntanımlı değerlerini gösterir:

#port = 5432                                            # (change requires restart)
#superuser_reserved_connections = 3                     # (change requires restart)
#unix_socket_directories = '/var/run/postgresql, /tmp'  #(comma-separated list of directories)

Sadece mevcut oturum için (geçici) parametre değiştirme:

postgres=# SET TIME ZONE 'Europe/Rome';
postgres=# select * from pg_settings where pg_settings.name='TimeZone';
   name   |   setting   | unit |                      category       |
----------+-------------+------+-------------------------------------+
TimeZone  | Europe/Rome |      | Client Connection Defaults / Locale |
                                                      and Formatting |
(1 row)

ALTER SYSTEM komutlarıyla da parametre değişikliği yapılabilir, ancak bu şekilde set edilen parametre anında etkin olmaz. Değişiklik postgresql.auto.conf dosyasına yazılır, servisi reload ettikten sonra etkinleşir. postgresql.auto.conf’taki parametre postgresql.conf’takine göre önceliklidir.

postgres=# alter system set work_mem='16MB';
ALTER SYSTEM

PostgreSQL Ayarları: Dosya Yerleri

PostgreSQL veri dizini ile yetkilendirme ayar dosyalarının yerleri özel olarak belirtilebilir. Özel olarak belirlenmezse varsayılan olarak PostgreSQL sürecini başlatırken verilen -D parametresinden veya PGDATA çevresel değişkeninden alınır. Değiştirmek istenirse:

data_directory = '/srv/postgresql'
hba_file = '/srv/postgresql/pg_hba.conf'
ident_file = '/srv/postgresql/pg_ident.conf'

PostgreSQL sunucu varsayılan olarak loopback (127.0.0.1) IP’sinden servis verir. Dışarıdan erişilebilmesi için:

listen_addresses = '*'

Hiç TCP/IP hizmeti vermemesi için:

listen_addresses = ''

Servisin unix soketiyle ilgili ayarlarıyla ilgili şunlar değiştirilebilir:

#unix_socket_directories = '/var/run/postgresql, /tmp'
#unix_socket_group = ''
#unix_socket_permissions = 0777

PostgreSQL sunucunun aynı anda kaç bağlantı isteği kabul edeceği:

max_connections = 100

PostgreSQL Ayarları: Zaman

PostgreSQL’in sistemin zaman bilgilerini kullanması için --with-system-tzdata parametresiyle derlenmiş olması gerekir (rpm kurulumunda bu şekildedir). Veritabanının kullandığı zaman ve yerellik bilgileri ilklendirme sırasında sunucudan alınır.

postgres=# show timezone;
 TimeZone
----------
 Turkey

postgres=# select current_time;
    current_time
--------------------
 14:25:00.358229+03

PostgreSQL’in sistem zamanından farklı bir zaman kullanması istenirse ayarlardan değiştirilebilir.

datestyle = 'iso, mdy'
timezone = 'Turkey'
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'