postgresql: comment vider et restaurer des rôles pour un cluster?

27

Où sont stockés les rôles dans un cluster et comment les vider?

J'ai fait un pg_dump d'une base de données, puis je l'ai chargé dans un cluster différent, mais je reçois beaucoup de ces erreurs:

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

Donc, apparemment, le vidage de ma base de données ne comprend pas les rôles. J'ai essayé de vider la base de données «postgres», mais je n'y vois pas non plus les rôles.

Dois-je utiliser pg_dumpall --roles-only?

Postgresql versions 8.4.8 et 9.1.4 OS: Ubuntu 11.04 Natty

Rob Bednark
la source

Réponses:

37

De la CREATE ROLEdocumentation :

Notez que les rôles sont définis au niveau du cluster de bases de données et sont donc valides dans toutes les bases de données du cluster.

Étant donné que les pg_dumpvidages d'une seule base de données, vous ne pouvez pas extraire des rôles avec cet utilitaire. La pg_dumpall --roles-onlycommande que vous avez proposée fera le travail, mais vous devrez peut-être filtrer sa sortie afin que seuls les rôles souhaités soient créés dans le nouveau cluster.

Les rôles sont stockés dans le pg_authidcatalogue, qui est physiquement stocké dans le data/global/sous - dossier d'une installation PostgreSQL, avec les autres tables à l'échelle du cluster. Vous pouvez interroger le contenu de pg_authidvia la pg_rolesvue.

REMARQUE : vous aurez besoin des droits de superutilisateur pour vider les rôles. Dans le cas contraire, vous obtiendrez une permission refusée sur SELECTle pg_authid- et même lorsqu'un super - utilisateur accorde des SELECTdroits, vous obtiendrez la même erreur. Dans ce cas, cependant, vous pouvez lister les rôles en interrogeant pg_authiddirectement, COPYdans un fichier et rouler un peu de magie pour créer le nécessaire CREATE ROLEet les ALTER ROLEdéclarations.

dezso
la source
Pouvez-vous ajouter comment restaurer tous les rôles (c'est-à-dire sans filtrage nécessaire)?
Ethan Furman
1
pour restaurer tous les rôles, copiez et collez simplement la sortie de pg_dumpall --roles-onlydans le shell psql souhaité. Ou spécifiques CREATE ROLEet ALTER ROLElignes
Fernando Fabreti