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
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.