Relationale Datenbank-Managementsysteme (RDBMS) sind ein wichtiger Bestandteil zahlreicher Websites und Anwendungen. Sie stellen eine strukturierte Art und Weise zum Speichern, Organisieren und Aufrufen von Daten bereit.
PostgreSQL, auch als Postgres bekannt, ist ein relationales Datenbank-Managementsystem, das eine Implementierung von Structured Query Language (besser bekannt als SQL) bietet. Es wird in vielen beliebten Projekten verwendet (ob groß oder klein), ist standardkonform und stellt viele fortgeschrittene Funktionen bereit, z. B. zuverlässige Transaktionen und Parallelität ohne Lesesperre.
Indem Sie diesem Leitfaden folgen, installieren Sie die neueste Version von PostgreSQL auf einem CentOS 8-Server.
Für dieses Tutorial benötigen Sie einen Server, auf dem CentOS 8 ausgeführt wird. Dieser Server sollte einen non-root user mit Administratorberechtigungen und eine mit firewalld
konfigurierte Firewall aufweisen. Folgen Sie zur Einrichtung unserem Leitfaden zur Ersteinrichtung des Servers für CentOS 8.
PostgreSQL ist über das standardmäßige AppStream-Software-Repository von CentOS 8 verfügbar; es gibt mehrere Versionen, die Sie installieren können. Sie können zwischen diesen Versionen wählen, indem Sie die entsprechende Sammlung von Paketen und Abhängigkeiten aktivieren, die zu der Version passt, die Sie installieren möchten. Einzelne Sammlungen werden dabei als Module Stream bezeichnet.
In DNF, dem standardmäßigen Paketmanager von CentOS 8, sind Module spezielle Sammlungen von RPM-Paketen, die zusammen eine größere Anwendung bilden. Damit soll die Installation von Paketen und ihren Abhängigkeiten für Benutzer intuitiver gestaltet werden.
Listen Sie mit dem Befehl dnf
die verfügbaren Streams für das postgresql
-Modul auf:
- dnf module list postgresql
Outputpostgresql 9.6 client, server [d] PostgreSQL server and client module
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 12 client, server PostgreSQL server and client module
In dieser Ausgabe sehen Sie, dass es im AppStream-Repository drei Versionen von PostgreSQL gibt: 9.6
, 10
und 12
. Der Stream, der Postgres Version 10 bereitstellt, ist der Standard, wie durch das darauffolgende [d]
angegeben. Wenn Sie diese Version installieren möchten, können Sie einfach sudo dnf install postgresql-server
ausführen und mit dem nächsten Schritt fortfahren. Zwar wird die Version 10 weiter verwaltet, doch wird in diesem Tutorial Postgres Version 12, die neueste Version zum Zeitpunkt der Verfassung dieses Texts, installiert.
Um PostgreSQL Version 12 zu installieren, müssen Sie den Module Stream dieser Version aktivieren. Wenn Sie einen Module Stream aktivieren, überschreiben Sie den standardmäßigen Stream und machen alle Pakete, die mit dem aktivierten Stream verbunden sind, im System verfügbar. Beachten Sie, dass nur ein Stream eines bestimmten Moduls auf einmal in einem System aktiviert werden kann.
Um den Module Stream für Postgres Version 12 zu aktivieren, führen Sie den folgenden Befehl aus:
- sudo dnf module enable postgresql:12
Wenn Sie dazu aufgefordert werden, drücken Sie y
und dann ENTER
, um zu bestätigen, dass Sie den Stream aktivieren möchten:
Output====================================================================
Package Architecture Version Repository Size
====================================================================
Enabling module streams:
postgresql 12
Transaction Summary
====================================================================
Is this ok [y/N]: y
Nach dem Aktivieren des Module Stream von Version 12 können Sie das Paket postgresql-server
installieren, um PostgreSQL 12 und alle seine Abhängigkeiten zu installieren:
- sudo dnf install postgresql-server
Wenn die Eingabeaufforderung erscheint, bestätigen Sie die Installation, indem Sie y
und dann ENTER
drücken:
Output. . .
Install 4 Packages
Total download size: 16 M
Installed size: 62 M
Is this ok [y/N]: y
Nachdem die Software installiert ist, führen Sie nun einige Initialisierungsschritte aus, um einen neuen Datenbankcluster für PostgreSQL vorzubereiten.
Sie müssen einen neuen PostgreSQL-Datenbankcluster einrichten, bevor Sie Tabellen erstellen und Daten in diese Tabellen laden können. Ein Datenbankcluster ist eine Sammlung von Datenbanken, die von einer einzigen Serverinstanz verwaltet wird. Das Einrichten eines Datenbankclusters besteht aus der Erstellung der Verzeichnisse, in der die Datenbankdaten platziert werden. Dabei werden die gemeinsamen Katalogtabellen sowie die Datenbanken template1
und postgres
erstellt.
template1
database ist eine Vorlage, die zur Erstellung neuer Datenbanken dient. Alles, was in template1
gespeichert wird (auch Objekte, die Sie selbst hinzufügen), wird bei der Erstellung in neuen Datenbanken abgelegt. Die Datenbank postgres
ist eine standardmäßige Datenbank, die für die Verwendung durch Benutzer, Dienstprogramme und Anwendungen anderer Anbieter entwickelt wurde.
Das im vorherigen Schritt installierte Postgres-Paket bietet ein praktisches Skript namens postgresql-setup
, das bei der grundlegenden Verwaltung von Datenbankclustern hilft. Um einen Datenbankcluster zu erstellen, führen Sie das Skript mit sudo
und der Option --initdb
aus:
- sudo postgresql-setup --initdb
Sie sehen die folgende Ausgabe:
Output * Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
Starten Sie nun mit systemctl
den PostgreSQL-Dienst:
- sudo systemctl start postgresql
Verwenden Sie dann erneut systemctl
, um den Dienst so zu aktivieren, dass er bei jedem Start des Servers gestartet wird:
- sudo systemctl enable postgresql
Dadurch erhalten Sie folgende Ausgabe:
OutputCreated symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.
Nachdem PostgreSQL nun ausgeführt wird, werden wir uns die Verwendung von Rollen ansehen, um zu erfahren, wie Postgres funktioniert und wie sich das System von ähnlichen Datenbank-Managementsystemen unterscheidet, die Sie möglicherweise in der Vergangenheit verwendet haben.
PostgreSQL nutzt ein Konzept namens Rollen, um die Authentifizierung und Autorisierung von Clients zu handhaben. Diese sind auf gewisse Weise herkömmlichen Konten im Unix-Stil ähnlich, Postgres unterscheidet jedoch nicht zwischen Benutzern und Gruppen und bevorzugt eher den flexiblen Begriff „Rolle“.
Nach der Installation verwendet Postgres ident-Authentifizierung. Das bedeutet, dass Postgres-Rollen mit einem übereinstimmenden Unix/Linux-Systemkonto verknüpft werden. Falls eine Rolle in Postgres existiert, kann sich ein Unix/Linux-Benutzername mit demselben Namen als diese Rolle anmelden.
Das Installationsverfahren hat ein Benutzerkonto namens Postgres erstellt, das mit der Standard-Postgres
-Rolle verknüpft ist. Um PostgreSQL zu verwenden, können Sie sich bei diesem Konto anmelden.
Es gibt verschiedene Möglichkeiten, um dieses Konto für den Zugriff auf die PostgreSQL-Eingabeaufforderung zu verwenden.
Wechseln Sie auf Ihrem Server zum Postgres-Konto, indem Sie Folgendes eingeben:
- sudo -i -u postgres
Sie können jetzt sofort auf eine Postgres-Eingabeaufforderung zugreifen, indem Sie Folgendes eingeben:
- psql
Damit melden Sie sich bei der PostgreSQL-Eingabeaufforderung an und von hier aus können Sie sofort mit dem Datenbank-Managementsystem arbeiten.
Beenden Sie die PostgreSQL-Eingabeaufforderung durch die Eingabe von:
- \q
Damit kehren Sie zur Linux-Eingabeaufforderung des Postgres-Kontos zurück. Kehren Sie nun wie folgt zu Ihrem ursprünglichen Konto zurück:
- exit
Außerdem können Sie unter Einsatz von sudo
Befehle für das Postgres-Konto direkt ausführen.
So wurden Sie z. B. im letzten Beispiel angewiesen, zur Postgres-Eingabeaufforderung zu gelangen, indem Sie zunächst zum Postgres-Benutzer wechseln und dann psql
ausführen, um die Postgres-Eingabeaufforderung zu öffnen. Alternativ könnten Sie dies in einem Schritt erledigen, indem Sie den einzelnen psql
-Befehl als Postgres-Benutzer mit sudo
ausführen, wie zum Beispiel:
- sudo -u postgres psql
Damit melden Sie sich direkt in Postgres ohne die zwischengeschaltete Bash
-Shell an.
Sie können die interaktive Postgres-Sitzung beenden, indem Sie Folgendes eingeben:
- \q
In diesem Schritt haben Sie das Postgres-Konto verwendet, um zur psql
-Eingabeaufforderung zu gelangen. Zahlreiche Anwendungsfälle erfordern jedoch mehr als eine Postgres-Rolle. Lesen Sie weiter, um mehr über die Konfiguration neuer Rollen zu erfahren.
Sie haben momentan nur die Postgres-Rolle innerhalb der Datenbank konfiguriert. Mit dem Befehl createrole
können Sie neue Rollen von der Befehlszeile aus erstellen. Die --interactive
Flag fordert Sie dazu auf, den Namen der neuen Rolle einzugeben und fragt Sie auch, ob diese Superuser-Berechtigung erhalten sollte.
Wenn Sie als Postgres-Konto angemeldet sind, können Sie einen neuen Benutzer erstellen, indem Sie Folgendes eingeben:
- createuser --interactive
Wenn Sie allerdings lieber sudo
für jeden Befehl verwenden, ohne Ihr normales Konto zu wechseln, verwenden Sie bitte Folgendes:
- sudo -u postgres createuser --interactive
Das Skript enthält einige Auswahlmöglichkeiten und führt basierend auf Ihren Antworten die erforderlichen Postgres-Befehle aus, um einen Benutzer im Sinne Ihrer Spezifikationen zu erstellen. Erstellen Sie für dieses Tutorial eine Rolle namens sammy und weisen Sie Superuser-Berechtigungen zu, indem Sie bei Aufforderung y
eingeben:
OutputEnter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
Sie können mehr Kontrolle erhalten, indem Sie einige zusätzliche Flags übergeben. Sehen Sie sich die Optionen auf der man
-Seite für createuser
an:
- man createuser
Ihre Installation von Postgres hat jetzt eine neue Rolle, aber Sie haben noch keine Datenbanken hinzugefügt. Der nächste Abschnitt beschreibt diesen Vorgang.
Eine andere, standardmäßige Annahme des Postgres-Authentifizierungssystems ist, dass mit jeder Rolle, die zur Anmeldung verwendet wird, eine gleichnamige Datenbank verknüpft ist, auf die diese Rolle zugreifen kann.
Wenn der von Ihnen im letzten Abschnitt erstellte Benutzer sammy heißt, wird diese Rolle demnach versuchen, standardmäßig eine Verbindung mit einer Datenbank namens sammy
herzustellen. Sie können die entsprechende Datenbank mit dem Befehl createdb
erstellen.
Wenn Sie als Postgres-Konto angemeldet sind, sollten Sie Folgendes eingeben:
- createdb sammy
Wenn Sie allerdings lieber sudo
für jeden Befehl verwenden, ohne Ihr normales Konto zu wechseln, verwenden Sie bitte Folgendes:
- sudo -u postgres createdb sammy
Diese Flexibilität liefert mehrere Möglickkeiten, um je nach Bedarf Datenbanken zu erstellen.
Nachdem Sie nun eine neue Datenbank erstellt haben, melden Sie sich mit Ihrer neuen Rolle bei ihr an.
Um sich mit der ident-basierten Authentifizierung anzumelden, benötigen Sie einen Linux-Benutzer mit dem gleichen Namen wie Ihre Postgres-Rolle und -Datenbank.
Wenn Sie keinen passenden Linux-Benutzer zur Verfügung haben, können Sie mit dem Befehl adduser
einen erstellen. Sie müssen dies von Ihrem Konto ohne root-Berechtigung mit sudo
-Privilegien vornehmen (d. h. Sie können nicht als postgres-Benutzer angemeldet sein):
- sudo adduser sammy
Sobald dieses neue Konto verfügbar ist, können Sie entweder die Datenbank wechseln und sich dann mit ihr verbinden, indem Sie zunächst Folgendes eingeben:
- sudo -i -u sammy
- psql
Oder Sie können Folgendes Inline vornehmen:
- sudo -u sammy psql
Mit diesem Befehl werden Sie automatisch angemeldet.
Wenn sich Ihr Benutzer mit einer anderen Datenbank verbinden soll, können Sie dies erreichen, indem Sie das Flag -d
einbinden und die Datenbank wie folgt angeben:
- psql -d postgres
Sobald Sie angemeldet sind, können Sie Ihre aktuellen Verbindungsinformationen überprüfen, indem Sie Folgendes eingeben:
- \conninfo
Damit wird die folgende Ausgabe angezeigt:
OutputYou are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".
Das ist nützlich, wenn Sie eine Verbindung mit nicht standardmäßigen Datenbanken oder mit nicht standardmäßigen Benutzern vornehmen.
Nachdem Sie mit Ihrer Datenbank verbunden sind, können Sie nun versuchen, Tabellen zu erstellen und zu löschen.
Da Sie nun wissen, wie Sie eine Verbindung mit dem PostgreSQL -Datenbanksystem herstellen, können Sie einige grundlegende Postgres-Managementaufgaben lernen.
Erstellen Sie zunächst eine Tabelle zum Speichern von Daten, wie zum Beispiel eine Tabelle, die Spielplatzgeräte beschreibt.
Die grundlegende Syntax für diesen Befehl lautet wie folgt:
CREATE TABLE table_name (
column_name1 col_type (field_length) column_constraints,
column_name2 col_type (field_length),
column_name3 col_type (field_length)
);
Diese Befehle geben der Tabelle einen Namen und definieren dann die Spalten, den Spaltentyp und die maximale Länge der Felddaten. Sie können wahlweise auch Beschränkungen für jede Spalte angeben.
Erstellen Sie zur Veranschaulichung eine einfache Tabelle wie folgt:
- CREATE TABLE playground (
- equip_id serial PRIMARY KEY,
- type varchar (50) NOT NULL,
- color varchar (25) NOT NULL,
- location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
- install_date date
- );
Mit diesem Befehl erstellen Sie eine Tabelle, mit der Spielplatzgeräte erfasst werden. Das beginnt mit einer Geräte-ID vom Typ Serie
. Der Datentyp ist eine automatisch steigende Ganzzahl. Sie haben dieser Spalte auch die Einschränkung PRIMARY KEY
(Primärschlüssel) gegeben, was bedeutet, dass die Werte einzigartig sein müssen und nicht Null sein dürfen.
Für zwei der Spalten (equip_id
und install_date
) gibt der Befehl keine Feldlänge vor. Das liegt daran, dass für einige Spalten keine bestimmte Länge vorgegeben wird, weil die Länge durch den Typ bestimmt wird.
Die nächsten beiden Zeilen erstellen Spalten für type
(Typ) bzw. color
(Farbe) der Geräte, die beide nicht leer sein dürfen. Die nächste Zeile erstellt eine location
-Spalte für den Standort und eine Einschränkung, die vorschreibt, dass der Wert einer von acht möglichen Werten ist. Die letzte Zeile erzeugt eine Datumsspalte, in der das Datum erfasst wird, an dem Sie die Geräte installiert haben.
Zeigen Sie Ihre neue Tabelle an, indem Sie Folgendes eingeben:
- \d
Damit wird die folgende Ausgabe angezeigt:
Output List of relations
Schema | Name | Type | Owner
--------+-------------------------+----------+-------
public | playground | table | sammy
public | playground_equip_id_seq | sequence | sammy
(2 rows)
Ihre Spielplatz-Tabelle ist hier, aber Sie sehen auch etwas namens playground_equip_id_seq
, das die Typen-sequence
angibt. Damit wird der Typ Serie
angegeben, den Sie Ihrer Spalte equip_id
zugeordnet haben. Damit wird die nächste Nummer in der Sequenz aufgezeichnet. Der Serientyp wird automatisch für diese Art von Spalten erstellt.
Wenn Sie nur die Tabelle, ohne die Sequenz, sehen möchten, können Sie Folgendes eingeben:
- \dt
Dadurch erhalten Sie:
Output List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | playground | table | sammy
(1 row)
In diesem Schritt haben Sie eine Beispieltabelle erstellt. Im nächsten Schritt versuchen Sie, Einträge in dieser Tabelle hinzuzufügen, abzufragen und zu löschen.
Jetzt können Sie Daten in die Tabelle einfügen.
Sie können zum Beispiel eine Rutsche und eine Schaukel hinzufügen, indem Sie die Tabelle aufrufen, der Sie diese Geräte hinzufügen möchten, die Spalten bezeichnen und dann Daten in die einzelnen Spalten eingeben:
- INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
- INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');
Sie sollten bei der Eingabe der Daten darauf achten, einige häufige Fehler zu vermeiden. Setzen Sie den Spaltennamen zum Beispiel nicht in Anführungszeichen, aber die Spaltenwerte müssen mit Anführungszeichen eingegeben werden.
Sie sollten auch bedenken, dass Sie keinen Wert für die Spalte equip_id
eingeben dürfen. Das liegt daran, dass dieser Wert automatisch generiert wird, wenn eine neue Zeile in der Tabelle erstellt wird.
Sie können die hinzugefügten Informationen mit der folgenden Eingabe abrufen:
- SELECT * FROM playground;
Sie sehen die folgende Ausgabe:
Output equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
1 | slide | blue | south | 2017-04-28
2 | swing | yellow | northwest | 2018-08-16
(2 rows)
Hier können Sie sehen, dass Ihre equip_id
erfolgreich ausgefüllt wurde und alle anderen Daten korrekt organisiert wurden.
Wenn die Rutsche auf dem Spielplatz beschädigt wird und Sie diese entfernen müssen, können Sie auch die Zeile aus der Tabelle entfernen, indem Sie Folgendes eingeben:
- DELETE FROM playground WHERE type = 'slide';
Führen Sie eine erneute Abfrage der Tabelle durch:
- SELECT * FROM playground;
Sie erhalten folgende Ausgabe:
Output equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
2 | swing | yellow | northwest | 2018-08-16
(1 row)
Beachten Sie, dass Ihre Rutsche nicht mehr Teil der Tabelle ist.
Nachdem Sie nun Einträge in Ihrer Tabelle hinzugefügt und gelöscht haben, können Sie versuchen, Spalten hinzuzufügen und zu löschen.
Nach dem Erstellen einer Tabelle können Sie sie ändern, indem Sie Spalten hinzufügen oder entfernen. Fügen Sie eine Spalte hinzu, um den letzten Wartungsbesuch für jedes Gerät zu zeigen, indem Sie Folgendes eingeben:
- ALTER TABLE playground ADD last_maint date;
Wenn sie sich die Tabelleninformationen erneut ansehen, werden Sie sehen, dass eine neue Spalte hinzugefügt wurde (aber keine Daten eingegeben wurden).
- SELECT * FROM playground;
Sie erhalten folgende Ausgabe:
Output equip_id | type | color | location | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
2 | swing | yellow | northwest | 2018-08-16 |
(1 row)
Das Löschen einer Spalte ist ebenso einfach. Wenn Sie feststellen, dass Ihre Arbeitskräfte ein anderes Tool verwendet haben, um die Wartungsarbeiten zu erfassen, können Sie die Spalte löschen, indem Sie Folgendes eingeben:
- ALTER TABLE playground DROP last_maint;
Damit werden die Spalte last_maint
und alle darin enthaltenen Werte gelöscht, aber alle anderen Daten bleiben intakt.
Nachdem Sie nun Spalten hinzugefügt und gelöscht haben, können Sie im letzten Schritt versuchen, bestehende Daten zu aktualisieren.
Bisher haben Sie gelernt, wie man einer Tabelle Einträge hinzufügen und aus ihr löschen kann, aber dieses Tutorial hat noch nicht erklärt, wie man bestehende Einträge ändern kann.
Sie können die Werte einer vorhandenen Eingabe aktualisieren, indem Sie den gewünschten Datensatz abfragen und die Spalte auf den Wert einstellen, den Sie verwenden möchten. Sie können eine Abfrage nach dem Schaukel
-Eintrag vornehmen (damit erhalten Sie alle Einträge mit dem Wort Schaukel in der Tabelle) und die Farbe in red
(rot) ändern:
- UPDATE playground SET color = 'red' WHERE type = 'swing';
Sie können verifizieren, dass die Arbeiten erfolgreich waren, indem Sie die Daten erneut abfragen:
- SELECT * FROM playground;
Sie erhalten folgende Ausgabe:
Output equip_id | type | color | location | install_date
----------+-------+-------+-----------+--------------
2 | swing | red | northwest | 2010-08-16
(1 row)
Wie Sie sehen, wird die Farbe der Schaukel jetzt als red
(rot) angegeben.
Sie haben PostgreSQL nun auf Ihrem CentOS 8-Server eingerichtet. Sie können allerdings noch mehr über Postgres lernen. Hier finden Sie einige Anleitungen zur Nutzung von Postgres:
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!