Instalacja oraz konfiguracja serwera PostgreSQL

Silnik bazy danych alternatywny do mySQL. Wykorzystywany głównie dla:

  1. prywatna chmura (ownCloud lub nextCloud)

  2. system antyspamowy dspam

  3. system antyspamowy amavisd

  4. obsługa webmaila Round Cube

  5. baza danych dla drupal

  6. zaplecze do innych pakietów, np. collectd, php

Instalacja

Korzystając z własnego repozytorium pakietów, to należy wykonać:

# wersja 16
pkg install -Uy databases/postgresql16-server

Pakiet postgresql-client zostanie doinstalowany automatycznie

Rozbudowa /etc/login.conf

Od wersji 9.x postgresql ma ustawione w skrypcie startowym:

postgresql_class="postgres"

Konieczne jest zatem dopisanie do /etc/login.conf następujących wierszy:

postgres:\
        :lang=en_US.UTF-8:\
        :setenv=LC_COLLATE=C:\
        :tc=default:

a następnie przebudowa bazy danych cap_mkdb:

cap_mkdb /etc/login.conf

PostgreSQL 9.x

Partycja zfs

zfs create -o compress=off sys/data/u/local/pgsql
chmod 0700 /usr/local/pgsql
chown pgsql:pgsql /usr/local/pgsql

PostgreSQL 11+

Partycja zfs

zfs create -o compress=off sys/data/v/db/postgres
chmod 0700 /var/db/postgres
chown postgres:postgres /var/db/postgres

Konfiguracja

Ustawienia dla skryptu startowego

Z wykorzystaniem repozytorium konfiguracji należy ew. zmodyfikować ustawienia w pliku /etc/rc.conf.d/postgres dla katalogu z bazami

Inicjalizacja bazy danych

service postgresql initdb

Podmiana kodowania (bytea)

/!\ /!\ /!\ UWAGA /!\ /!\ /!\ Podmiana bytea z hex na escape jest potrzebne przez mailzu. Jest to tylko i wyłącznie kodowanie na wyjściu (SELECT??). Jest to dokładnie opisane w dokumentacji Postgres-a. Być może można tego nie ruszać, jeżeli nie ma potrzeby.

--- /var/db/postgres/data16/postgresql.conf.install     2024-10-25 10:25:09.216639000 +0200
+++ /var/db/postgres/data16/postgresql.conf     2024-10-25 10:26:30.842746000 +0200
@@ -215,7 +215,7 @@ dynamic_shared_memory_type = posix  # the default is us
                                        # unrecoverable data corruption)
 #synchronous_commit = on               # synchronization level;
                                        # off, local, remote_write, remote_apply, or on
-#wal_sync_method = fsync               # the default is the first option
+wal_sync_method = fdatasync            # the default is the first option
                                        # supported by the operating system:
                                        #   open_datasync
                                        #   fdatasync (default on Linux and FreeBSD)
@@ -225,7 +225,7 @@ dynamic_shared_memory_type = posix  # the default is us
 #full_page_writes = on                 # recover from partial page writes
 #wal_log_hints = off                   # also do full page writes of non-critical updates
                                        # (change requires restart)
-#wal_compression = off                 # enables compression of full-page writes;
+wal_compression = zstd                 # enables compression of full-page writes;
                                        # off, pglz, lz4, zstd, or on
 #wal_init_zero = on                    # zero-fill new WAL files
 #wal_recycle = on                      # recycle WAL files
@@ -482,8 +482,8 @@ log_destination = 'syslog'
                                        # in all cases.

 # These are relevant when logging to syslog:
-#syslog_facility = 'LOCAL0'
-#syslog_ident = 'postgres'
+syslog_facility = 'LOCAL3'
+syslog_ident = 'postgres'
 #syslog_sequence_numbers = on
 #syslog_split_messages = on

@@ -705,7 +705,7 @@ log_timezone = Poland
 #vacuum_multixact_freeze_table_age = 150000000
 #vacuum_multixact_freeze_min_age = 5000000
 #vacuum_multixact_failsafe_age = 1600000000
-#bytea_output = 'hex'                  # hex, escape
+bytea_output = 'escape'                        # hex, escape
 #xmlbinary = 'base64'
 #xmloption = 'content'
 #gin_pending_list_limit = 4MB

Kompatybilność wstecz - bytea a wersja dspam

Po długim szukaniu udało się znaleźć różnicę w obsłudze bytea pomiędzy PostgreSQL9.0 a wyższymi. Chodzi o parametr standard_conforming_strings, który od wersji PostgreSQL9.1 jest domyślnie ustawiony na wartość on. Trzeba jeszcze doczytać w konfiguracji, jakie są konsekwencje zmiany tego parametru na wartość off. Jeżeli jedyną bazą danych jest dspam, to może nie mieć to znaczenia, ale trzeba mieć na uwadze przy kolejnych upgrade-ach zarówno bazy danych jak i dspam.

Źródła w sieci internet

  1. http://www.postgresql.org/docs/9.2/interactive/datatype-binary.html#AEN5253


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

SerwerBazDanychPgsql (ostatnio edytowane 2024-10-25 09:10:58 przez wtps0n)