Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

PostgreSQL für Hoster

PostgreSQL, der empfohlene Datenbankserver für Exponential, aus Sicht eines Hosters - Versionen, die Regel zum Eigentümer der Datenbank, die Erweiterung pgcrypto, Einstellungen, die Installation mit exp:install…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/hosting/basics/postgresql-for-hosts.md

On this page

This page is a translation. Read the English original

PostgreSQL für Hoster

Diese Seite ist für Systemadministratoren bei einem Hosting-Anbieter, die PostgreSQL-Datenbanken für Exponential-Websites bereitstellen. Sie beantwortet: welche PostgreSQL-Versionen Sie betreiben, wie Sie die Datenbank und den Benutzer jeder Website so anlegen, dass der Installer gelingt, was die Erweiterung pgcrypto damit zu tun hat und wie Sie sichern und Fehler suchen. PostgreSQL ist die zweite in der offiziellen Reihenfolge und der empfohlene Datenbankserver. Quellen: Datenbankunterstützung und Kapitel 9.4.

Inhalt

  1. Warum PostgreSQL
  2. Versionen und Erweiterung
  3. Eine Datenbank pro Website anlegen
  4. pgcrypto
  5. Einstellungen und Installation
  6. Sequenzen
  7. Backups
  8. Probleme und ihre Ursachen
  9. Checkliste
  10. Verwandte Seiten

Warum PostgreSQL

Das Projekt nennt PostgreSQL den empfohlenen Datenbankserver: striktes SQL, Sperren auf Zeilenebene, eigene Replikation und Wiederherstellung zu einem Zeitpunkt, und ein Datenbank-Testjob in der CI des Projekts bei jedem Push (PostgreSQL 15). Es ist die erste Wahl, wenn eine Website einen Datenbankserver braucht, zum Beispiel wenn sich mehrere Webserver eine Datenbank teilen (Datenbankunterstützung).

Versionen und Erweiterung

ElementWertQuelle
Untergrenze des Assistenten8.0eZSetupDatabaseMap() in kernel/setup/ezsetupcommon.php
Praktisches Minimum13der Installer legt pgcrypto an, ab PostgreSQL 13 eine vertrauenswürdige Erweiterung
Ab 15der Benutzer der Website muss Eigentümer der Datenbank seinPostgreSQL lässt andere Benutzer keine Tabellen mehr in public anlegen
Funktionierend gesehen13.23 auf dem Entwicklungsserver; 15 in der CIVersionen
PHP-Erweiterungpgsql (php-pgsql, php<version>-pgsql)

Betreiben Sie ein Release, das Ihr Hersteller noch mit Sicherheitskorrekturen versorgt. Die Untergrenze des Assistenten ist keine Empfehlung.

Eine Datenbank pro Website anlegen

Die Installer legen weder Datenbanken noch Benutzer an. Legen Sie beides vor der Installation an, und machen Sie den Benutzer der Website zum Eigentümer seiner Datenbank:

sudo -u postgres createuser --pwprompt <customer>
sudo -u postgres createdb --owner=<customer> --encoding=UTF8 --template=template0 <customer>

Mit template0 können Sie die Kodierung unabhängig vom Standard des Servers wählen. Ein Panel, das PostgreSQL-Datenbanken anlegt, setzt vielleicht einen anderen Eigentümer oder eine andere Kodierung; lesen Sie in der Dokumentation Ihres Panels nach und vergleichen Sie mit den Befehlen oben (Datenbanken und Benutzer in Control Panels).

Tipp Eine Datenbank und ein Benutzer pro Website, der Benutzer als Eigentümer der Datenbank, ist das einfachste Modell für die Trennung zwischen Kunden und für einen späteren Umzug einer Website.

pgcrypto

Der Treiber berechnet MD5 mit digest() aus pgcrypto. Der Installer führt CREATE EXTENSION IF NOT EXISTS pgcrypto aus; als vertrauenswürdige Erweiterung (PostgreSQL 13 und später) darf der Eigentümer der Datenbank sie anlegen. Wenn sie dem Server fehlt, installieren Sie das Contrib-Paket von PostgreSQL Ihrer Distribution und dann als Eigentümer oder Superuser:

sudo -u postgres psql -d <customer> -c 'CREATE EXTENSION IF NOT EXISTS pgcrypto;'

Wenn sie fehlt, meldet der Setup-Assistent, dass die Funktion digest in der Datenbank nicht verfügbar ist und Exponential ohne sie nicht laufen kann.

Hinweis Installieren Sie das Contrib-Paket auf jedem PostgreSQL-Server, den Sie Exponential-Kunden anbieten. Es ist die eine Voraussetzung auf dem Server, die der Benutzer der Website nicht allein beheben kann.

Einstellungen und Installation

[DatabaseSettings]
DatabaseImplementation=ezpostgresql
Server=localhost
Port=5432
User=<customer>
Password=<the password>
Database=<customer>
UsePersistentConnection=disabled

Die Installer schreiben dies nach settings/override/site.ini.append.php. Eine Installation über die Konsole, mit dem Passwort aus der Umgebung, damit es nicht in der Shell-Historie landet:

EXP_INSTALL_DB_PASSWORD='<the password>' php bin/php/console exp:install --apply --db=pgsql \
    --db-host=127.0.0.1 --db-name=<customer> --db-user=<customer> --allow-root-user

--db=postgresql und --db=postgres werden ebenfalls akzeptiert; der Kickstarter nimmt [database_choice] Type=pgsql. Der Setup-Assistent füllt Port 5432 und Benutzer postgres vor (settings/setup.ini DefaultPort_pgsql, DefaultUser_pgsql). UsePersistentConnection=enabled nutzt pg_pconnect statt pg_connect; unter Velocity hält jeder persistente Worker seine Verbindung ohnehin.

Sequenzen

Spalten mit automatischem Hochzählen nutzen Sequenzen mit dem Namen <table>_<column>_seq. Nachdem Sie Daten mit expliziten IDs geladen haben (ein Import, die Wiederherstellung ausgewählter Tabellen), korrigieren Sie sie, sonst scheitert das nächste Einfügen mit einem doppelten Schlüssel:

SELECT setval('ezcontentobject_id_seq', (SELECT max(id) FROM ezcontentobject));

Der Schema-Installer tut das selbst, nachdem er Daten geladen hat.

Backups

pg_dump -U <customer> -Fc <customer> > <customer>.dump
pg_restore -U <customer> -d <customer> --clean <customer>.dump

Ein vollständiges Backup enthält außerdem var/storage, settings/override und settings/siteaccess. Schalten Sie für eine Wiederherstellung den Wartungsmodus ein, und leeren Sie danach jeden Cache (Backup und Wiederherstellung). Wiederherstellung zu einem Zeitpunkt und Replikation sind eigene Funktionen von PostgreSQL; konfigurieren Sie sie mit der Dokumentation von PostgreSQL.

Probleme und ihre Ursachen

SymptomUrsache
Der Assistent meldet, dass die Funktion digest nicht verfügbar istpgcrypto konnte nicht angelegt werden; installieren Sie das Contrib-Paket und legen Sie die Erweiterung an
Verbindung abgelehntlisten_addresses in postgresql.conf oder eine fehlende Zeile in pg_hba.conf
Zugriff verweigert beim Anlegen von Tabellender Benutzer der Website ist nicht Eigentümer der Datenbank (PostgreSQL 15 und später)
Doppelter Schlüssel beim Einfügen nach einem ImportSequenzen hinter ihren Tabellen; korrigieren Sie sie wie oben
Das SQL einer Erweiterung scheitert nur auf PostgreSQLMySQL-Syntax wie Backticks als Anführungszeichen (Hinweise für alle Engines)
Keine Seite lädt, error.log meldet „Database implementation not supported“ein falsch geschriebenes DatabaseImplementation

Checkliste

  • To do: Ein unterstütztes PostgreSQL-Release, 13 oder später, mit installiertem Contrib-Paket.
  • To do: Eine Datenbank pro Website, Kodierung UTF8, im Eigentum des Benutzers der Website.
  • To do: pgsql im Web-PHP und im PHP der Kommandozeile.
  • To do: pg_hba.conf erlaubt den Benutzer der Website nur von den Webservern aus.
  • To do: Backups mit pg_dump geplant und eine Wiederherstellung getestet.

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x