web-dev-qa-db-fra.com

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

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

29
Rob Bednark

Du CREATE ROLE documentation :

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.

Depuis pg_dump sauvegarde une seule base de données, vous ne pouvez pas extraire de rôles avec cet utilitaire. Le pg_dumpall --roles-only la commande que vous avez proposée fera le travail - cependant 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_authid catalogue, 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_authid à travers le pg_roles vue.

[~ # ~] note [~ # ~] : vous aurez besoin des droits de superutilisateur pour vider les rôles. Sinon, vous obtiendrez une autorisation refusée le SELECT le pg_authid - et même lorsqu'un superutilisateur accorde des droits SELECT, vous obtenez la même erreur. Dans ce cas, cependant, vous pouvez répertorier les rôles en interrogeant pg_authid directement, COPY dans un fichier et lancez un peu de magie pour créer le CREATE ROLE et ALTER ROLE déclarations.

39
dezso