it-swarm.com.de

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

Wo sind Rollen in einem Cluster gespeichert und wie speichere ich sie?

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

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

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

Muss ich pg_dumpall --roles-only Verwenden?

Postgresql-Versionen 8.4.8 und 9.1.4 Betriebssystem: Ubuntu 11.04 Natty

29
Rob Bednark

Aus der CREATE ROLE Dokumentation :

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

Da pg_dump Eine einzelne Datenbank ausgibt, können Sie mit diesem Dienstprogramm keine Rollen extrahieren. Der von Ihnen vorgeschlagene Befehl pg_dumpall --roles-only 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_authid - Katalog gespeichert, der zusammen mit den anderen clusterweiten Tabellen physisch im Unterordner data/global/ Einer PostgreSQL-Installation gespeichert ist. Sie können den Inhalt von pg_authid Über die Ansicht pg_roles Abfragen.

[~ # ~] Hinweis [~ # ~] : Sie benötigen Superuser-Rechte, um die Rollen zu sichern. Andernfalls wird eine Berechtigung für SELECT für pg_authid Verweigert - und selbst wenn ein Superuser SELECT Rechte gewährt, wird der gleiche Fehler angezeigt. In diesem Fall können Sie die Rollen jedoch auflisten, indem Sie pg_authid Direkt abfragen, COPY in eine Datei eintragen und etwas Magie einsetzen, um die erforderlichen CREATE ROLE Und ALTER ROLE Aussagen.

39
dezso