IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Objet SQL et owner.


Sujet :

PostgreSQL

  1. #1
    Membre éclairé Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    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.

  2. #2
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    bonjour,

    as tu regardé du coté de information_schema ?

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

    ca pourrais te donner une piste

  3. #3
    Membre éclairé Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Par défaut
    Merci pour la piste, je vais y regarder...

  4. #4
    Membre éclairé Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Par défaut
    Re...

    En faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  5. #5
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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'

  6. #6
    Membre éclairé Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Par défaut
    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...

  7. #7
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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'

  8. #8
    Membre éclairé Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Par défaut
    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...

  9. #9
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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'

  10. #10
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    autre chose,
    dans pg_namespace il y a un nspowner ... pour recup le owner des schemas.

  11. #11
    Membre éclairé Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Par défaut
    C'est impecable... Un tout grand merci...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/06/2009, 12h32
  2. [SSIS] [2K5] Tache transfert objet SQL
    Par tonitoBI dans le forum SSIS
    Réponses: 1
    Dernier message: 29/04/2009, 10h51
  3. Gestion des objets SQL Server via Visual source Safe
    Par battl14 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 18/03/2009, 16h27
  4. libération des objets SQL SERVER 2000 et ASP
    Par patdodos dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 27/11/2007, 14h45
  5. ReportStudio - Objet SQL a quoi ça sert ?
    Par Phil93 dans le forum Cognos
    Réponses: 1
    Dernier message: 16/11/2007, 23h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo