From: | Jouneau Luc <ljouneau(at)yahoo(dot)com> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Propritaire de schmas |
Date: | 2004-08-04 08:17:06 |
Message-ID: | 20040804081706.86606.qmail@web53508.mail.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonjour,
Quelqu'un pourrait-il me dire comment faire pour
qu'une base nouvellement créée et attribuée à user
particulier n'ait pas le schéma public attribué à
postgres :
$ createuser b1
Shall the new user be allowed to create databases
?(y/n) n
Shall the new user be allowed to create more new
users? (y/n) n
CREATE USER
$ createdb -O b1 b1
CREATE DATABASE
$ psql -U b1 b1
Welcome to psql 7.4.2, the PostgreSQL interactive
terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
b1=> \dn
List of schemas
Name | Owner
--------------------+----------
information_schema | postgres
pg_catalog | postgres
pg_temp_1 | postgres
pg_toast | postgres
public | postgres
(5 rows)
Après il n'y a plus moyen de réattribuer le schéma
public à b (pas vu de commandes du type ALTER SCHEMA
b1 OWNER b1)
Si je souhaite recopier b1 dans une base b2 (dont le
owner est un user b2) cela me pose le problème suivant
:
$ pg_dump -U b1 -F c b1 > data.svg
$ pg_restore -U b2 --no-owner -F c -d b2 data.svg
Et ca plante sur :
pg_restore: [archiver (db)] could not execute query:
ERROR: permission denied for schema public
L'erreur vient du fait qu'en début de restauration, le
script généré par pg_dump demande à exécuter :
REVOKE ALL ON SCHEMA public FROM PUBLIC;
GRANT ALL ON SCHEMA public TO PUBLIC;
J'ai trouvé un contournement :
Après le dump, je fais un pg_restore -l data.svg pour
lister les différents objets qui ont été sauvegardé et
je commente (avec un ; en début de ligne) toutes les
commandes qui concernent postgres :
$ pg_restore -l data.svg | sed
's/^\(.*[\t]\)postgres$/;\1postgres/' > restore.list
Au moment du restore, j'utilise cette liste où toutes
les commandes concernant postgres ont été inhibées :
$ pg_restore --use-list restore.list -U b2 --no-owner
-F c -d b2 data.svg
mais bon, tout cela est bien compliqué et il doit y
avoir plus simple.
Des idées ?
Merci
Luc
Vous manquez despace pour stocker vos mails ?
Yahoo! Mail vous offre GRATUITEMENT 100 Mo !
Créez votre Yahoo! Mail sur http://fr.benefits.yahoo.com/
Le nouveau Yahoo! Messenger est arrivé ! Découvrez toutes les nouveautés pour dialoguer instantanément avec vos amis. A télécharger gratuitement sur http://fr.messenger.yahoo.com
From | Date | Subject | |
---|---|---|---|
Next Message | Valerie Schneider DSI/DEV | 2004-08-04 13:09:57 | Pb de perf sur une grosse base |
Previous Message | Nicolas CHEVE | 2004-07-31 17:03:35 | Re: petit tutoriel debutant |