Propritaire de schmas

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 d’espace 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

Browse pgsql-fr-generale by date

  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