2009-11-30 7 views
2

Est-il possible de copier les autorisations utilisateur d'une table d'une base de données PostgreSQL vers une autre table? Est-ce juste une question de mettre à jour la valeur de la colonne pg_class.relacl pour la table cible à la valeur de la table source, comme dans:Autorisations de copie PostgreSQL d'une autre table

UPDATE pg_class 
SET relacl=(SELECT relacl FROM pg_class WHERE relname='source_table') 
WHERE relname='target_table'; 

Cela semble fonctionner, mais que je manque tout ce qui peut avoir besoin de être fait ou d'autres «getchas» avec cette méthode?

Merci d'avance pour vos réponses.

Répondre

2

Si vous pouvez utiliser à la place de ligne de commande de SQL alors une approche plus sûre serait d'utiliser pg_dump:

pg_dump dbname -t oldtablename -s \ 
| egrep '^(GRANT|REVOKE)' \ 
| sed 's/oldtablename/newtablename/' \ 
| psql dbname 

Je suppose un serveur unix. Sous Windows, j'utiliserais pg_dump -s dans un fichier, le modifierais manuellement, puis l'importerais dans une base de données.

Peut-être que vous devrez également copier les autorisations sur les séquences appartenant à cette table - pg_dump fonctionnera.