PostgreSQL, oft einfach als Postgres bekannt, ist ein universelles objektrelationales Open-Source-Datenbankverwaltungssystem. Es verfügt über viele leistungsstarke Funktionen wie Online-Backups, Point-in-Time-Recovery, verschachtelte Transaktionen, SQL- und JSON-Abfragen, Multiversion Concurrency Control (MVCC), asynchrone Replikation und mehr.
Dieses Tutorial führt Sie durch die Schritte zur Installation des PostgreSQL-Datenbankservers auf Debian 10. Wir werden auch die Grundlagen der grundlegenden Datenbankverwaltung untersuchen.
PostgreSQL wird installiert #
Zum Zeitpunkt der Erstellung dieses Artikels war die neueste Version von PostgreSQL, die in den standardmäßigen Debian-Repositories verfügbar ist, PostgreSQL Version 11.5.
Um PostgreSQL auf Ihrem Debian-Server zu installieren, führen Sie die folgenden Schritte als Root oder Benutzer mit sudo-Berechtigungen aus:
-
Beginnen Sie mit der Aktualisierung des APT-Paketindex:
sudo apt update -
Installieren Sie den PostgreSQL-Server und das Contrib-Paket, das zusätzliche Funktionen für die PostgreSQL-Datenbank bereitstellt:
sudo apt install postgresql postgresql-contrib -
Sobald die Installation abgeschlossen ist, wird der PostgreSQL-Dienst gestartet. Um die Installation zu überprüfen, verwenden Sie
psqlTool zum Drucken der Serverversion:sudo -u postgres psql -c "SELECT version();"Die Ausgabe sollte in etwa so aussehen:
PostgreSQL 11.5 (Debian 11.5-1+deb10u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
psql ist ein interaktives Terminalprogramm, mit dem Sie mit dem PostgreSQL-Server interagieren können. PostgreSQL-Rollen und Authentifizierungsmethoden #
PostgreSQL handhabt Datenbankzugriffsberechtigungen unter Verwendung des Konzepts von Rollen. Je nachdem, wie Sie die Rolle einrichten, kann sie einen Datenbankbenutzer oder eine Gruppe von Datenbankbenutzern repräsentieren.
PostgreSQL unterstützt mehrere Authentifizierungsmethoden. Die am häufigsten verwendeten Methoden sind:
- Vertrauen - Eine Rolle kann sich ohne Passwort verbinden, solange die in der
pg_hba.confdefinierten Kriterien erfüllt sind erfüllt sind. - Passwort – Eine Rolle kann eine Verbindung herstellen, indem sie ein Passwort bereitstellt. Die Passwörter können als
scram-sha-256gespeichert werdenmd5undpassword(Klartext) - Ident - Wird nur für TCP/IP-Verbindungen unterstützt. Es funktioniert, indem es den Benutzernamen des Betriebssystems des Clients erhält, mit einer optionalen Benutzernamenzuordnung.
- Peer - Dasselbe wie Ident, wird aber nur bei lokalen Verbindungen unterstützt.
Die PostgreSQL-Clientauthentifizierung wird in der Konfigurationsdatei mit dem Namen pg_hba.conf definiert . Für lokale Verbindungen ist PostgreSQL so eingestellt, dass es die Peer-Authentifizierungsmethode verwendet.
Der Benutzer „postgres“ wird automatisch erstellt, wenn PostgreSQL installiert wird. Dieser Benutzer ist der Superuser für die PostgreSQL-Instanz und entspricht dem MySQL-Root-Benutzer.
Um sich als „postgres“ beim PostgreSQL-Server anzumelden, wechseln Sie zum Benutzerpostgres und greifen mit psql auf eine PostgreSQL-Eingabeaufforderung zu Dienstprogramm:
sudo su - postgrespsql
Von hier aus können Sie mit dem PostgreSQL-Server interagieren. Um die PostgreSQL-Shell zu verlassen, geben Sie Folgendes ein:
\q
Sie können das sudo verwenden Befehl, um auf die PostgreSQL-Eingabeaufforderung zuzugreifen, ohne den Benutzer zu wechseln:
sudo -u postgres psql
Das postgres user wird normalerweise nur vom localhost verwendet.
PostgreSQL-Rolle und -Datenbank erstellen #
Der createuser Mit dem Befehl können Sie neue Rollen über die Befehlszeile erstellen. Nur Superuser und Rollen mit CREATEROLE Berechtigung kann neue Rollen erstellen.
Im folgenden Beispiel erstellen wir eine neue Rolle namens kylo , eine Datenbank namens kylodb und gewähren Sie der Rolle Berechtigungen für die Datenbank.
-
Erstellen Sie zuerst die Rolle, indem Sie den folgenden Befehl ausgeben:
sudo su - postgres -c "createuser kylo" -
Als nächstes erstellen Sie die Datenbank mit
createdbBefehl:sudo su - postgres -c "createdb kylodb" -
Um dem Benutzer Berechtigungen für die Datenbank zu erteilen, stellen Sie eine Verbindung zur PostgreSQL-Shell her:
sudo -u postgres psqlFühren Sie die folgende Abfrage aus:
GRANT ALL PRIVILEGES ON DATABASE kylodb TO kylo;
Aktivieren Sie den Fernzugriff auf den PostgreSQL-Server #
Standardmäßig lauscht der PostgreSQL-Server nur auf der lokalen Schnittstelle 127.0.0.1 .
Wenn Sie von Remote-Standorten aus eine Verbindung zum PostgreSQL-Server herstellen möchten, müssen Sie den Server so einstellen, dass er die öffentliche Schnittstelle überwacht, und die Konfiguration so bearbeiten, dass Remote-Verbindungen akzeptiert werden.
Öffnen Sie die Konfigurationsdatei postgresql.conf und fügen Sie listen_addresses = '*' hinzu in CONNECTIONS AND AUTHENTICATION Sektion. Dies weist den Server an, auf allen Netzwerkschnittstellen zu lauschen.
sudo nano /etc/postgresql/11/main/postgresql.conf /etc/postgresql/11/main/postgresql.conf#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
Speichern Sie die Datei und starten Sie den PostgreSQL-Dienst neu, damit die Änderungen wirksam werden:
sudo service postgresql restart
Bestätigen Sie die Änderungen mit ss Dienstprogramm:
ss -nlt | grep 5432 LISTEN 0 128 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 128 [::]:5432 [::]:*
Die Ausgabe sollte zeigen, dass der PostgreSQL-Server auf allen Schnittstellen (0.0.0.0) lauscht.
Der letzte Schritt besteht darin, den Server so zu konfigurieren, dass er Remote-Anmeldungen akzeptiert, indem Sie die pg_hba.conf bearbeiten Datei.
Unten sind einige Beispiele, die verschiedene Anwendungsfälle zeigen:
/etc/postgresql/11/main/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD
# The user jane will be able to access all databases from all locations using an md5 password
host all jane 0.0.0.0/0 md5
# The user jane will be able to access only the janedb from all locations using an md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust