PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So arbeiten Sie mit PostgreSQL-Datenbanken

Inhaltsverzeichnis

Datenbanken auflisten
Datenbank löschen
Alle Datenbanken löschen
Zuschüsse löschen
Datenbank löschen oder löschen
Löschen a Grant
Wiederherstellen einer Datenbank
Restore Grant

PostgreSQL ist eine ausgezeichnete alternative Datenbank-Engine zu MySQL oder MariaDB, aber die Verwaltung dieser Datenbanken ist sehr unterschiedlich, insbesondere für Systemadministratoren, die sehr daran gewöhnt sind, MySQL über die Befehlszeile oder PHPMyAdmin zu verwenden. Viele CMS und Anwendungen wissen bereits, wie sie mit PostgreSQL-Datenbanken interagieren, sind aber wie MySQL immer noch darauf angewiesen, dass Sie diese Datenbanken pflegen.

Für diesen Artikel gehen wir davon aus, dass Sie als „root“-Benutzer per SSH mit Ihrem Server verbunden sind und den PostgreSQL-Server mit der Standardkonfiguration installiert haben, die eine Verbindung als „postgres“-Benutzer erfordert. Daher verwenden die meisten Befehle auch die Option -U postgres. Diese Befehle sind in den meisten modernen Versionen zwischen CentOS und Ubuntu im Allgemeinen identisch, wurden jedoch hauptsächlich auf einem CentOS 7 VPS-Server und einem Ubuntu 16.04-Server mit PostgreSQL 9.2 getestet.

Das Erstellen von Datenbanken und Grants ist ziemlich komplex, aber wenn Sie cPanel, Plesk oder ein anderes Control Panel verwenden, das die PostgreSQL-Integration unterstützt, ist die Einrichtung einfach. Das Erstellen dieser Datenbanken und Genehmigungen über die Befehlszeile würde den Rahmen dieses speziellen Artikels sprengen, daher gehen wir auch davon aus, dass Sie Ihre Datenbanken bereits ausführen und verwenden.

Datenbanken in PostgreSQL auflisten

Es ist hilfreich, die genauen Namen der Datenbanken zu kennen, an denen Sie arbeiten werden, und eine doppelte Überprüfung durchzuführen, um sicherzustellen, dass Sie auf dem richtigen Server arbeiten. Lassen Sie uns zuerst die PostgreSQL-Datenbanken auf unserem Rechner auflisten:
psql -l -U postgres

Die Ausgabe dieses Befehls ist eine Tabelle mit Datenbanknamen, Eigentümern und Zugriffsrechten. Wir werden Daten aus der ersten Spalte verwenden, wenn wir Datenbanknamen für zukünftige Befehle beschreiben. Für diesen Artikel verwenden wir eine Datenbank namens „Datenbankname “.

Wenn Sie nur Datenbanknamen und keine anderen Informationen benötigen, können Sie die überschüssigen Informationen entfernen, indem Sie eine exakte Abfrage nach Datenbanknamen durchführen:
psql -U postgres -tA -c 'select datname from pg_database;'

Dieser Befehl führt einen Befehl aus (beschrieben durch die -c Flag) der Auswahl des Datennamens Spalte der pg_database globale Tabelle. Das -t flag listet nur Tupel (Ergebniszeilen) auf und verbirgt überzählige Deskriptoren wie den Header und die Ergebnisanzahl sowie das -A flag entfernt die Ausrichtung und druckt eine Datenbank pro Zeile ohne Zeichen vor oder hinter den Namen. Die Ausgabe dieses Befehls ist besonders nützlich, um Schleifen für Datenbank-Dumps zu erstellen.

Dump eine Datenbank

Der dump-Befehl nimmt eine vollständige Kopie einer Datenbank, einschließlich aller Tabellen, Schemata und Daten, und speichert sie in einer einzigen komprimierten Datei:
pg_dump -c -Fc -U postgres database_name > database_name.psql

Es gibt ein paar wichtige Flags für diesen Befehl. -c , oder –clean , sagt pg_dump um DROP-Anweisungen zur Ausgabe hinzuzufügen, und -Fc , oder –format=custom , komprimiert und organisiert die Ausgabe, die mit pg_restore verwendet werden soll später. Das benutzerdefinierte Format bietet die größte Flexibilität und speichert die Sicherung vorteilhafterweise auch in einer einzigen Datei.

Alle Datenbanken löschen

Es wäre wahrscheinlich besser, jede der Datenbanken in eine eigene Datei zu bringen, indem Sie den obigen Befehl mehrmals ausführen. Wir verweisen auf unseren zweiten Listing-Befehl, indem wir einige nicht benötigte Datenbanken entfernen, um unsere individuellen Dumps zu erstellen.
for db in $(psql -U postgres -tA -c 'select datname from pg_database;' | grep -E -v “^(template1|template0|postgres)$”); do
echo $db
pg_dump -c -Fc -U postgres $db > $db.psql
done

Diese for-Schleife übergibt eine Liste aller Datenbanken außer den Standardvorlagen und der Postgres-Datenbank an pg_dump Befehl zum Erstellen einer .psql Datei für jeden im aktuellen Verzeichnis.

Hinweis:Es ist auch möglich, einen Dump aller Datenbanken in eine einzige Datei durchzuführen, allerdings kann dies bei großen Datensätzen unhandlich und schwierig wiederherzustellen sein. Daher empfehle ich diese Methode nicht, obwohl sie weniger komplex ist und in manchen Situationen funktionieren kann.

pg_dumpall --clean -U postgres > pg.all.psql

Dump-Zuschüsse

Grants werden im PostgreSQL-Schema gespeichert. Sie können das Schema ausgeben und so alle verfügbaren Berechtigungen für das System abrufen, indem Sie den Befehl pg_dump verwenden:
pg_dumpall -U postgres -s > pg.schema.psql

Dadurch werden nicht nur Berechtigungen ausgegeben, sondern auch der Rest des Schemas des Servers, einschließlich Datenbank- und Tabellenerstellungsanweisungen, Eigentums- und Rollenmitgliedschaft und ACL-Zuweisung – im Grunde alles außer den Daten.

Wenn Sie nur Benutzer (Rollen) und Berechtigungen benötigen, können Sie diese mit diesem Befehl sammeln:
pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' -e '^(CREATE|ALTER)\ ROLE' > pg.grants.psql

Dies nutzt den vollständigen Schema-Dump, nimmt aber nur die Rollenerstellungsanweisungen und die Grant/Revoke-Anweisungen, um Benutzer und Berechtigungen zusammenzustellen.

Löschen oder löschen Sie eine Datenbank

Um eine Datenbank zu zerstören, ist die Syntax sehr einfach. Bitte seien Sie vorsichtig, wenn Sie diesen Befehl eingeben, da Sie nicht zur Bestätigung aufgefordert werden!
psql -U postgres -c ‘drop database database_name’

Wenn die Datenbank existiert, wird sie nicht mehr existieren. Es gibt auch einen Befehlszeilen-Wrapper für dieselbe Aufgabe:
dropdb -U postgres database_name

Eine Förderung löschen

Berechtigungen werden Benutzern entzogen, indem sie widerrufen werden. Es ist wichtig, zuerst zu wissen, welche Berechtigungen ein bestimmter Benutzer hat, also suchen wir nach ihnen, indem wir das Schema ausgeben und Zeilen finden, die sich auf unseren Benutzer beziehen.
pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' | grep database_user

In meinem Fall sieht die Bewilligung so aus:
GRANT ALL ON DATABASE database_name TO database_user;

Um dem entgegenzuwirken, widerrufen wir denselben Deskriptor:
psql -U postgres -c ‘revoke all on database database_name from database_user;’

Hinweis:Beachten Sie die geringfügigen Änderungen, GRANT wurde in REVOKE geändert und TO wurde in FROM geändert. Dieser Befehl wird in einfache Anführungszeichen eingeschlossen und mit dem Flag -c an psql übergeben, um den Befehl in PostgreSQL auszuführen.
Dadurch wird die ursprüngliche GRANT-Anweisung durch ein REVOKE im Schema ersetzt. Wenn Sie den ersten Befehl in diesem Abschnitt erneut ausführen, wird jetzt nur die gerade übergebene Zeile angezeigt:
REVOKE ALL ON DATABASE database_name FROM database_user;

Eine Datenbank wiederherstellen

Für Datenbanken, die mit der in diesem Artikel verwendeten pg_dump-Methode gesichert wurden, können wir die gesamte Datenbank mit diesem Befehl wiederherstellen:
pg_restore -U postgres -c -C -O -d database_name database_name.psql

Hier werden noch einige Flaggen benötigt! -c oder –reinigen löscht wie zuvor Datenbankobjekte, bevor aus der Datei in PostgreSQL geschrieben wird. Wir fügen dies nur für den Fall hinzu, dass es nicht für den Dump-Befehl verwendet wurde. -C , oder –erstellen , wird die Datenbank database_name während der Wiederherstellung erstellen, wenn sie nicht vorhanden ist. Wenn die Datenbank bereits vorhanden ist, wird das -c Flag wird es vor -C zerstören stellt es nach. Als nächstes kommt -O , oder –no-owner , wodurch der Eigentümer aus der Datenbank entfernt wird. Dadurch kann ein Backup aus einer beliebigen Quelle auf den Besitzer des Benutzers geändert werden, der die Wiederherstellung durchführt, was in unserem Fall postgres ist. -d Datenbankname beschreibt den Namen der Datenbank, in die Sie wiederherstellen. Dies kann bei Bedarf ein anderer Name sein als der, unter dem die Sicherung erstellt wurde. Das letzte Argument ist der Name unserer Sicherungsdatei, Datenbankname.psql .

Zuschuss wiederherstellen

Da alle Grants in unserer Datei pg.grants.psql gespeichert sind, müssen wir nur den Benutzer auswählen, den wir wiederherstellen müssen. In unserem Fall stellen wir database_user wieder her:
grep database_user pg.grants.psql | psql -U postgres

Da die Datei pg.grants.psql Rollen und Berechtigungen enthält, erstellt dieser Befehl den Benutzer mit seinen ursprünglichen Berechtigungen und seinem Kennwort neu und gewährt ihm dann Zugriff auf die erforderlichen Datenbanken und Schemata.