postgresql: Wie kann ich Rollen für einen Cluster sichern und wiederherstellen?


27

Wo werden Rollen in einem Cluster gespeichert und wie kann ich sie sichern?

Ich habe einen pg_dump einer Datenbank erstellt und ihn dann in einen anderen Cluster geladen, aber ich bekomme viele dieser Fehler:

psql:mydump.sql:3621: ERROR:  role "myrole" does not exist 

Anscheinend enthält der Dump meiner Datenbank keine Rollen. Ich habe versucht, die 'postgres'-Datenbank zu löschen, aber ich sehe die Rollen dort auch nicht.

Muss ich verwenden pg_dumpall --roles-only?

Postgresql-Versionen 8.4.8 und 9.1.4 Betriebssystem: Ubuntu 11.04 Natty

Antworten:


37

Aus der CREATE ROLEDokumentation :

Beachten Sie, dass Rollen auf Datenbankclusterebene definiert werden und daher in allen Datenbanken im Cluster gültig sind.

Da pg_dumpeine einzelne Datenbank gesichert wird, können Sie mit diesem Dienstprogramm keine Rollen extrahieren. Der von pg_dumpall --roles-onlyIhnen vorgeschlagene Befehl erledigt die Arbeit. Möglicherweise müssen Sie jedoch die Ausgabe filtern, damit nur die gewünschten Rollen im neuen Cluster erstellt werden.

Rollen werden im pg_authidKatalog gespeichert data/global/, der sich zusammen mit den anderen clusterweiten Tabellen physisch im Unterordner einer PostgreSQL-Installation befindet. Sie können den Inhalt von pg_authidüber die pg_rolesAnsicht abfragen .

ANMERKUNG : Sie benötigen Superuser-Rechte, um die Rollen zu sichern. Andernfalls würden Sie eine Berechtigung für verweigert bekommen SELECTauf pg_authid- und selbst wenn ein Super - User gewährt SELECTRechte, dann würden Sie den gleichen Fehler. In diesem Fall jedoch können Sie die Rollen auflisten , indem Sie die Abfrage pg_authiddirekt COPYin eine Datei und etwas Magie rollen die notwendigen zu erstellen CREATE ROLEund ALTER ROLEAussagen.


Können Sie hinzufügen, wie alle Rollen wiederhergestellt werden (dh es ist keine Filterung erforderlich)?
— Ethan Furman

1
Um alle Rollen wiederherzustellen, kopieren Sie einfach die Ausgabe von und fügen Sie sie pg_dumpall --roles-onlyin die gewünschte psql-Shell ein. Oder spezifische CREATE ROLEund ALTER ROLELinien
— Fernando Fabreti
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.