Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-fr-generale by date

Next:From: Valerie Schneider DSI/DEVDate: 2004-08-04 13:09:57
Subject: Pb de perf sur une grosse base
Previous:From: Nicolas CHEVEDate: 2004-07-31 17:03:35
Subject: Re: petit tutoriel debutant

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group