Konfigurasyon dosyası temel olarak instance’ın davranışını etkiler, örneğin izin verilen bağlantı sayısı, veritabanı log yönetimi, vaccum, wal parametrelerini belirleme vb. Elbette tüm bunlar, veritabanı kurulduğunda varsayılan bir değere sahiptir, ancak bu değerleri iş yükünü ve çalışma ortamını daha iyi yansıtacak şekilde değiştirebiliriz.

Bu parametreleri ayarlamanın en temel yolu, normalde $PGDATA dizininde tutulan postgresql.conf dosyasını düzenlemektir, postgresql.conf dosyası init aşamasında varsayılan olarak kopyası yüklenir. Eğer postgresql.conf dosyasının tam yolunu komut kullanarak bulmak istersek aşağıdaki komutu kullanıyoruz.

select * from pg_settings where name='config_file';

Örnek bir postgresql.conf dosyası aşağıdaki gibidir, tahmin edileceği üzere her satıra bir parametre belirtilir,  name ve value arasındaki eşittir işareti opsiyoneldir. boşluklar önemsiz, # işareti ise satırın geri kalanını yorum olarak belirler.

Postgresql Parameter

NOT : posgresql.conf dosyasında aynı parametre için birden çok girdi içeriyorsa, sonuncusu hariç tümü yok sayılır, yani dosyada en son yazar değer geçerli olur.

Bu şekilde ayarlanan parametreler, cluster için varsayılan değerleri sağlar, aktif sessionlar tarafından görülen ayarlar, geçersiz kılınmadıkları sürece bu değerler olacaktır.

Postgresql main prosesi SIGHUP sinyalini aldığı zaman Postgresql konfigürasyon dosyası yeniden okunur. Bu sinyal postgresql’e iki yolla gönderilebilir. İşletim sistemi üzerinde postgres kulanıcısı ile “pg_ctl reload” komutu ile veya psql komut satırı aracından “SELECT pg_reload_conf()” komutu ile postgresql.conf dosyasının tekrar okunması sağlanır. Main prosesi ayrıca bu sinyali şu anda çalışan tüm sunucu proseslerine yayar, böylece mevcut sessionlar da yeni değerleri benimser (bu, o anda yürütülen herhangi bir client komutunu tamamladıktan sonra gerçekleşir). Alternatif olarak, sinyali doğrudan tek bir sunucu işlemine gönderebilirsiniz.  Konfigurasyon dosyasındaki geçersiz parametre ayarları benzer şekilde SIGHUP işlemi sırasında göz ardı edilir (ancak loga kaydedilir).

-bash-4.2$ /usr/pgsql-12/bin/pg_ctl reload
server signaled
-bash-4.2$ psql
psql (12.4)
Type "help" for help.

postgres=# select pg_reload_conf();
 pg_reload_conf 
----------------
 t
(1 row)

Bazı parametreler yalnızca sunucu başlangıcında ayarlanabilir; bu parametreleri için postgresql.conf dosyasının yorum kısmında “# (change requires restart)” yazar.

Postgresql.conf’a ek olarak, postgresql.conf ile aynı biçime sahip olan ancak manuel olarak değil, otomatik olarak düzenlenmesi amaçlanan bir postgresql.auto.conf dosyası içerir. Bu dosya, ALTER SYSTEM komutu ile sağlanan ayarları içerir. postgresql.auto.conf içindeki ayarlar postgresql.conf içindekileri geçersiz kılar. postgresql.auto.conf dosyasıda $PGDATA dizininde bulunur.

NOT : Pg_settings system viewi, sunucunun çalışma zamanı parametrelerine erişim sağlar. Esasen SHOW ve SET komutlarına alternatif bir arayüzdür. Ayrıca, minimum ve maksimum değerler gibi, SHOW’da doğrudan bulunmayan her parametre hakkında bazı gerçeklere erişim sağlar.

 select * from setting where name  = 'configuration_parameter';
UPDATE pg_settings SET setting = reset_val WHERE name = 'configuration_parameter';

Parametrelerin SQL ile Değiştirilmesi

PostgreSQL, parametreleri düzenlemek için üç SQL komutu sağlar.

  • ALTER SYSTEM : Cluster seviyesindeki parameterleri değiştirmek için kullanılır, postgresql.conf’u düzenlemeye eşdeğerdir. Bu parametre ile yapılan değişiklerin postgresql.auto.conf dosyasına yazıldığını söylemiştik. Örnekler;
ALTER SYSTEM SET wal_level = replica;
ALTER DATABASE test SET timezone = 'UTC-5';
ALTER SYSTEM RESET wal_level;
ALTER SYSTEM RESET ALL; 
  • ALTER DATABASE : Global parametrelerin veri tabanı bazında override edilmesi sağlanır. Örnekler;
 ALTER DATABASE db_test SET escape_string_warning = off;
ALTER DATABASE db_test SET enable_indexscan TO off;
ALTER DATABASE test SET timezone = 'UTC-5';
ALTER DATABASE db_test RESET escape_string_warning;
ALTER DATABASE db_test RESET ALL;
  • ALTER ROLE : Kullanıcıya özel parametre geçilmesini sağlar. Örnekler;
 ALTER ROLE test_user SET client_min_messages  = DEBUG;
ALTER ROLE test_user SET maintenance_work_mem = 100000;
ALTER ROLE test_user IN DATABASE test_db SET maintenance_work_mem = 100000;
ALTER USER test_user IN DATABASE test_db RESET maintenance_work_mem;
ALTER USER test_user IN DATABASE test_db RESET ALL;
ALTER USER test_user IN DATABASE test_db SET timezone = 'UTC-7';

(continue reading…)

Loading