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" 
Actions

Formats disponibles : Atom PDF