Evolution #351
ferméPrise en charge de tous les objets
100%
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 environ 4 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 environ 4 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 environ 4 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 environ 4 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 environ 4 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 environ 4 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 environ 4 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