PostgreSQL ist ein relationales Datenbankmanagementsystem (RDBMS), das für seine Erweiterbarkeit, SQL-Standardkonformität, Robustheit und erweiterten Funktionen bekannt ist. PostgreSQL wird oft für Anwendungen bevorzugt, die eine strenge Transaktionskontrolle und Datenintegrität erfordern und FreeBSD bietet eine hervorragende Basis für den Betrieb einer PostgreSQL-Datenbank, die diese eine ähnliche Lizenz wie BSD verwendet.
PostgreSQL bildet den Datenbankserver und damit die Basis für alle darauf aufbauenden Artikel.
Dies kann entweder separat als eigene Datenbank Jail oder zusammen mit der Applikation ohne separate Jail erfolgen. Gerade wenn ohnehin mehrere PostgreSQL-Datenbanken im Einsatz sind, lohnt sich ein zentraler Server.
NEU: Für ganz ungeduldige habe ich einen Konsole only Abschnitt. Da gibts nur Befehle, keine Erklärungen.
Letzte Aktualisierung:
Damit sieht das Setup inkl. aller optionalen Möglichkeiten so aus:
┌──────────────────────────┐
│ FreeBSD │
│ ┌──────────────────────┐ │
│ │ jail/pgsql │ │
LAN: 0.0.0.0:5432 ─│─│─► postgresql-server │ │
│ │ │ │
│ └──────────────────────┘ │
└──────────────────────────┘
Es wird ein eigenes Jail empfohlen, sollte PostgreSQL als zentraler Datenbank Server auch gleichzeitig für andere Anwendungen dienen. Hier nehmen wir pgsql als Jail Namen und es wird auf jeden Fall die Option allow_sysvipc benötigt, auch wenn PostgrSQL in ein vorhandenes Jail mit installiert wird.
Entweder mit bastile console pgsql eine Konsole in das erstellte Jail starten, oder es erfolgt ein Login per SSH (wenn aktiviert) mit ssh USERNAME@IP oder ssh USERNAME@HOSTNAME, um dann mit su root Rechte zu erlangen.
Paketquellen sollten angepasst werden, siehe separater Artikel.
Nun die Paketquelle mit pkg update aktualisieren und dann die benötigten Pakete installieren: pkg install -y postgresql17-server
Dienste aktivieren und beim Start des Jails automatisch mit starten: service postgresql enable
PostgreSQL mit service postgresql initdb initialisieren und mit service postgresql start starten.
Datenbanken sollten regelmäßig und am besten automatisch gewartet werden:
Mit mkdir /var/db/postgres/bin eine Verzeichnis für das folgende Skript anlegen:
cat > /var/db/postgres/bin/vacuum.sh <<'EOF'
#! /bin/sh
/usr/local/bin/vacuumdb -az 1> /dev/null 2> /dev/null
/usr/local/bin/reindexdb -a 1> /dev/null 2> /dev/null
EOF
und dann jeden Abend um 0:00 Uhr ausführen lassen:
echo "# PostgreSQL house keeping" >> /etc/crontab
echo "0 0 * * * postgres /var/db/postgres/bin/vacuum.sh" >> /etc/crontab
Falls es ein separates PostgreSQL Jail ist, dürfen damit die anderen Jails auf die Datenbank(en) zugreifen, muss aber erst vorher erlaubt werden:
echo "# MIT Anmeldung, allen anderen wird nicht vertraut" >> /var/db/postgres/data17/pg_hba.conf
echo "host all all all scram-sha-256" >> /var/db/postgres/data17/pg_hba.conf
Dies bedeutet auch, dass der Dienst nicht nur an localhost gebunden sein darf, da er sonst nicht über die Netzwerk-IP-Adresse erreichbar ist.
sed -i '' "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /var/db/postgres/data17/postgresql.conf
Danach muss PostgreSQL mit service postgresql restart neu gestartet werden.
su -m postgres -c "createuser -s DATENBANKBENUTZER --pwprompt" # Erstellt den Benutzer
su -m postgres -c "createdb -O DATENBANKBENUTZER -E Unicode -T template1 DATENBANKNAME" # Erstellt die Datenbank für den Benutzer
pg_dump -Fc -h "DATENBANKHOST" -p "DATENBANKPORT" -d "DATENBANKNAME" -U "DATENBANKBENUTZER" -f "ZIELPFAD"
Voilá