Projet

Général

Profil

Actions

Evolution #351

fermé

Prise en charge de tous les objets

Ajouté par Leslie Lemaire il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Haut
Assigné à:
-
Début:
24/09/2020
Echéance:
% réalisé:

100%

Temps estimé:
# ref:

Description

... ou plus précisément de tous les objets sur lesquels il y a de la gestion de droits à faire.

  • tables
  • vues
  • vues matérialisées
  • tables distantes
  • tables partitionnées
  • séquences
  • fonctions
  • agrégats
  • types
  • domaines

Ceci concerne toutes les actions portant sur les objets, soit en pratique deux actions : le déplacement d'objet (implémenté pour les tables et les vues seulement) et la réinitialisation des droits sur un objet (non implémenté à ce jour).

Récupérer la liste de tous les objets utiles (sans les types créés automatiquement par PostgreSQL et autres machins qu'on ne veut surtout pas voir apparaître), j'utilise la méthode ci-après, adaptée pour l'occasion en python :

typlist = [
["table", "pg_class", "rel", "relkind = 'r'"],
["partitioned table", "pg_class", "rel", "relkind = 'p'"],
["view", "pg_class", "rel", "relkind = 'v'"],
["materialized view", "pg_class", "rel", "relkind = 'm'"],
["foreign table", "pg_class", "rel", "relkind = 'f'"],
["sequence", "pg_class", "rel", "relkind = 'S'"],
["function", "pg_proc", "pro", "proisagg = false"],
["aggregate", "pg_proc", "pro", "proisagg = true"],
["type", "pg_type", "typ", "NOT typtype = 'd'"],
["domain", "pg_type", "typ", "typtype = 'd'"]
]

r = "" 

for i in range(len(typlist)):
    if not r == "":
        r = r + " UNION " 

    r = r + "SELECT nom_schema, {ref[2]}name AS objname, '{ref[0]}' AS objtype FROM z_asgard.gestion_schema_etr\
    LEFT JOIN pg_catalog.{ref[1]} ON oid_schema = {ref[2]}namespace\
    LEFT JOIN pg_catalog.pg_depend ON objid = {ref[1]}.oid\
    WHERE {ref[3]} AND NOT deptype = 'i'".format(ref=typlist[i])

r = r + " ORDER BY nom_schema, objtype, objname" 

Mis à jour par Didier LECLERC il y a plus de 3 ans

  • Statut changé de Nouveau à En cours
  • % réalisé changé de 0 à 70
  • Leslie
    Alimentation des objets dans l'ensemble des schémas : OK
    Déplacement des objets dans l'arborescence des schémas actifs : OK
    Juste un petit soucis sur la requete
    
    ["function", "pg_proc", "pro", "proisagg = false"],
    ["aggregate", "pg_proc", "pro", "proisagg = true"],
    
    PROISAGG non reconnu, j'ai vérifié
    J'ai modifié temporairement par les lignes suivantes pour continuer, même si ce n'est pas bon, cela me permet de continuer
    
        ["function", "pg_proc", "pro", "proisstrict = false"],
        ["aggregate", "pg_proc", "pro", "proisstrict = true"],
    
  • J'ai amendé mon code avec une option supplémentaire dans le QGIS3.ini ou le global tjs avec la même explication d'avoir une personnalisation de son AM.
    Generale\displayObjects=all
    ou bien en séparant les noms des objets avec une virgule
    Generale\displayObjects=table, view, aggregate, materialized view, foreign table

Cette option permet soit de visualiser et de manipuler l'exhaustivité des objets ou bien uniquement quelques uns.
Ci-dessous la liste des dix objets et leurs noms retenus par Leslie.

"table" 
"partitioned table" 
"view" 
"materialized view" 
"foreign table" 
"sequence" 
"function" 
"aggregate" 
"type" 
"domain" 

  • Je m'interrige sur la réinitialisation des droits (à voir avec Leslie)

Mis à jour par Didier LECLERC il y a plus de 3 ans

  • En complément, je ne trouve pas les icônes correspondantes aux objets (partitioned table et aggregate)

Mis à jour par Leslie Lemaire il y a plus de 3 ans

Il y a eu un changement de structure dans pg_proc sur PG 11, prokind remplace proisagg.

Partons sur :

typlist = [
["table", "pg_class", "rel", "relkind = ANY (ARRAY['r', 'p'])"],
["view", "pg_class", "rel", "relkind = 'v'"],
["materialized view", "pg_class", "rel", "relkind = 'm'"],
["foreign table", "pg_class", "rel", "relkind = 'f'"],
["sequence", "pg_class", "rel", "relkind = 'S'"],
["function", "pg_proc", "pro", "true"],
["type", "pg_type", "typ", "NOT typtype = 'd'"],
["domain", "pg_type", "typ", "typtype = 'd'"]
]

Mis à jour par Leslie Lemaire il y a plus de 3 ans

Nouvelle requête qui sort les noms complets pour les fonctions (avec types des arguments, tels qu'attendu en entrée des fonctions asgard_deplace_obj et asgard_initialise_obj). La liste des types n'a pas bougé depuis mon précédent message.

typlist = [
["table", "pg_class", "rel", "relkind = ANY (ARRAY['r', 'p'])"],
["view", "pg_class", "rel", "relkind = 'v'"],
["materialized view", "pg_class", "rel", "relkind = 'm'"],
["foreign table", "pg_class", "rel", "relkind = 'f'"],
["sequence", "pg_class", "rel", "relkind = 'S'"],
["function", "pg_proc", "pro", "true"],
["type", "pg_type", "typ", "NOT typtype = 'd'"],
["domain", "pg_type", "typ", "typtype = 'd'"]
]

r = "" 

for i in range(len(typlist)):
    if not r == "":
        r = r + " UNION " 

    r = r + """ 
    SELECT
        nom_schema,
        CASE WHEN '{ref[0]}' = 'function'
            THEN quote_ident({ref[2]}name::text) || substring({ref[1]}.oid::regprocedure::text, '[(][^()]*[)]$')
            ELSE {ref[2]}name::text END AS objname,
        '{ref[0]}' AS objtype
        FROM z_asgard.gestion_schema_etr
            LEFT JOIN pg_catalog.{ref[1]} ON oid_schema = {ref[2]}namespace
            LEFT JOIN pg_catalog.pg_depend ON objid = {ref[1]}.oid
        WHERE {ref[3]} AND NOT deptype = 'i'
    """.format(ref=typlist[i])

r = r + " ORDER BY nom_schema, objtype, objname" 

Mis à jour par Didier LECLERC il y a plus de 3 ans

Leslie,
J'ai un effet de bord avec les guillemets doubles qui s'affichent pour mes deux fonctions personnalisées qui ne font rien.
Je fais certainement une bêtise.

Did

Mis à jour par Leslie Lemaire il y a plus de 3 ans

Le nom d'une fonction est le seul cas où il faut mettre les guillemets dans le nom de l'objet, du moins quand il ne respecte pas le standard de nommage des identifiants de PG. C'est expliqué dans la doc, mais c'est un peu traître.

Au-delà de la visibilité des guillemets, est-ce qu'il y a un problème ?

Mis à jour par Didier LECLERC il y a plus de 3 ans

  • Statut changé de En cours à Fermé
  • % réalisé changé de 70 à 100

Aucun soucis avec les traitements de l'extension d'Asgard.
Vu avec Leslie, uniquement pour les noms des fonctions
On en reste là
Donc affichage des objets et prise en charge des déplacements

Actions

Formats disponibles : Atom PDF