Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/08/2007, 09h40   #1
Membre actif
 
Avatar de Empty_body
 
Inscription : mai 2004
Messages : 679
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 679
Points : 186
Points : 186
Par défaut Objet SQL et owner.

Salut,

Je me trouve face à un problème de owner au nieveau de mes db. J'avais en place 2 utilisateur possèdant le droit de créer de objets DB. L'utilisateur postgres et l'utilisateur maison. L'utilisateur postgres ne devrait normalement plus être utilisé, néanmoins d'autres développeurs de l'équipe continuent à l'utiliser pour créer des clés. Résultat, lorsque je dump avec l'utilisateur maisopn, tout ce qui est propriété de l'utilisateur postgres ne passe pas. Quelqu'un sait comment je peux rétrouver dans mes db tout ce qui a pour owner postgres?

Merci.
__________________
Pourquoi vouloir ré-inventer la roue...
...Surtout si c'est pour la faire carrée...
Empty_body est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 09h47   #2
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
bonjour,

as tu regardé du coté de information_schema ?

il y a par exemple : table_privileges, ....

ca pourrais te donner une piste
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 09h47   #3
Membre actif
 
Avatar de Empty_body
 
Inscription : mai 2004
Messages : 679
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 679
Points : 186
Points : 186
Merci pour la piste, je vais y regarder...
__________________
Pourquoi vouloir ré-inventer la roue...
...Surtout si c'est pour la faire carrée...
Empty_body est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 10h20   #4
Membre actif
 
Avatar de Empty_body
 
Inscription : mai 2004
Messages : 679
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 679
Points : 186
Points : 186
Re...

En faisant
Code :
1
2
3
psql -U moi dbname
SET search_path TO INFORMATION_SCHEMA, public;
SELECT table_name,constraint_name FROM constraint_table_usage;
J'obtient la liste des clés primaires et les tables aux quelles elles se rapportent... Malheureusement, je n'ai pas les owner...
__________________
Pourquoi vouloir ré-inventer la roue...
...Surtout si c'est pour la faire carrée...
Empty_body est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 10h39   #5
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
en fait, le bon vieux pg_catalog est là pour nous sauver, je sais pas ou ca peut se trouver dans l'information schema.

voici la solution, apres il faut custom bien sur
Code :
1
2
3
4
 
SELECT relname
FROM pg_catalog.pg_class c INNER JOIN pg_catalog.pg_authid a ON (c.relowner=a.oid) 
WHERE rolname <> 'postgres'
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 11h59   #6
Membre actif
 
Avatar de Empty_body
 
Inscription : mai 2004
Messages : 679
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 679
Points : 186
Points : 186
Merci pour l'ébauche hpalpha. Il me reste à modifier de manière à ne voir que les tables non-système créees par postgres... Enfin le 'que' est peut être beaucoup présumer de mes compétences...
__________________
Pourquoi vouloir ré-inventer la roue...
...Surtout si c'est pour la faire carrée...
Empty_body est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 12h18   #7
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Pas de pb


pg_catalog est un schema systeme, c'est dedans que l'on a toutes les informations qui concerne la structure des objets (tables, view, index, ...)

il y a une table pg_class qui reference chaque objet de la base de données.

pg_authid est la table avec les users, et les password (et plus)

dans pg_class, tu as un champ relowner --> le owner, mais le probleme c'est que c'est un oid (en entier, donc pas tres clair)
on va donc chercher sa correspondance dans pg_authid (oid est la colonne qui sert d'identifiant a un user), d'où le inner join entre les tables

enfin, je restreint mon filtre, mais dans ton cas, tu cherches les owners a postgres (desole, j'ai fais l'inverse) donc, on met

WHERE rolname = 'postgres'


La requete complete :

Code :
1
2
3
4
 
SELECT relname
FROM pg_catalog.pg_class c INNER JOIN pg_catalog.pg_authid a ON (c.relowner=a.oid) 
WHERE rolname = 'postgres'
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 12h36   #8
Membre actif
 
Avatar de Empty_body
 
Inscription : mai 2004
Messages : 679
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 679
Points : 186
Points : 186
J'ai lancé la query, un tout grand merci en tout cas, le seul problème c'est que j'ai une référence à toutes sorte d'info qui ne m'intéressent pas et qui viennent fortement gonfler la liste...
J'ai ceci :
relname | rolname
-----------------------------------+----------
views | postgres
data_type_privileges | postgres
element_types | postgres
sql_packages | postgres
sql_parts | postgres
sql_sizing | postgres
sql_sizing_profiles | postgres
table_constraints | postgres
table_privileges | postgres
tables | postgres
triggered_update_columns | postgres
triggers | postgres
usage_privileges | postgres
view_column_usage | postgres
view_routine_usage | postgres
view_table_usage | postgres
referential_constraints | postgres
role_column_grants | postgres
role_routine_grants | postgres
role_table_grants | postgres
role_usage_grants | postgres
routine_privileges | postgres
routines | postgres
schemata | postgres
sequences | postgres
sql_features | postgres
sql_implementation_info | postgres
sql_languages | postgres
attributes | postgres
check_constraint_routine_usage | postgres
check_constraints | postgres
column_domain_usage | postgres
column_privileges | postgres
column_udt_usage | postgres
columns | postgres
constraint_column_usage | postgres
constraint_table_usage | postgres
domain_constraints | postgres
domain_udt_usage | postgres
domains | postgres
enabled_roles | postgres
key_column_usage | postgres
parameters | postgres
information_schema_catalog_name | postgres
applicable_roles | postgres
administrable_role_authorizations | postgres
actes_actes | postgres
actes_actes_pkey | postgres

Alors que j'aimerais juste avoir
actes_actes | postgres
actes_actes_pkey | postgres

Je pense que tout ce qui est au dessus est lié au système postgres et ne constitue donc pas des info intéressantes à mon niveau...
__________________
Pourquoi vouloir ré-inventer la roue...
...Surtout si c'est pour la faire carrée...
Empty_body est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 12h49   #9
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
oui c'est vrai que ca affiche les objets systemes

alors on custom, dans pg_namespace on a les schema donc on va esclure tous ce qui commence par pg_ et information_schema :

Code :
1
2
3
4
5
6
7
8
9
 
 
SELECT relname,nspname
FROM pg_catalog.pg_class c 
INNER JOIN pg_catalog.pg_namespace n ON (c.relnamespace=n.oid)
INNER JOIN pg_catalog.pg_authid a ON (c.relowner=a.oid) 
WHERE nspname NOT LIKE 'pg_%' 
AND nspname != 'information_schema' 
AND rolname = 'postgres'

version plus elegante, avec les expression reg :
Code :
1
2
3
4
5
6
7
8
 
 
SELECT relname,nspname
FROM pg_catalog.pg_class c 
INNER JOIN pg_catalog.pg_namespace n ON (c.relnamespace=n.oid)
INNER JOIN pg_catalog.pg_authid a ON (c.relowner=a.oid) 
WHERE nspname !~ '(^pg_)|(information_schema)' 
AND rolname = 'postgres'
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 12h50   #10
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
autre chose,
dans pg_namespace il y a un nspowner ... pour recup le owner des schemas.
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 13h00   #11
Membre actif
 
Avatar de Empty_body
 
Inscription : mai 2004
Messages : 679
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 679
Points : 186
Points : 186
C'est impecable... Un tout grand merci...
__________________
Pourquoi vouloir ré-inventer la roue...
...Surtout si c'est pour la faire carrée...
Empty_body est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h12.


 
 
 
 
Partenaires

Hébergement Web