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
psql
Tool 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.conf
definierten 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-256
gespeichert werdenmd5
undpassword
(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 - postgres
psql
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
createdb
Befehl: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 psql
Fü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