PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Comprendre le format pg_node_tree » 13/10/2017 15:07:01

Utiliser la fonction pg_get_expr, c'est justement ce que je ne veux pas faire car elle retourne le code SQL exécuté et il me faudrait alors écrire un parseur SQL pour en extraire les informations qui m'intéresse (les entités SQL utilisées). D'ou l'idée de partir du pg_node_tree qui se rapproche d'un AST.

Olivier smile

#2 Général » Comprendre le format pg_node_tree » 13/10/2017 11:43:34

olivierauverlot
Réponses : 3

Bonjour à tous,

J'ai besoin d'analyser la structure d'une valeur par défaut ou d'une contrainte de type check. Je récupère leurs définitions dans les tables du catalogue.

Par exemple, pour la table ayant l'OID 56233 dans ma base de test, je fais la requête suivante:

SELECT
    adrelid as table_oid,
    adnum as num_column,
    adsrc as content,
    adbin as nodes,
    pg_get_expr(adbin,56233,false)
FROM pg_attrdef
WHERE adrelid = 56233

Ce qui m'intéresse ici, c'est le contenu de la colonne adbin qui contient la représentation interne de la valeur par défaut.

{FUNCEXPR :funcid 480 :funcresulttype 23 :funcretset false :funcvariadic false :funcformat 2 :funccollid 0 :inputcollid 0 :args ({FUNCEXPR :funcid 1574 :funcresulttype 20 :funcretset false :funcvariadic false :funcformat 0 :funccollid 0 :inputcollid 0 :args ({CONST :consttype 2205 :consttypmod -1 :constcollid 0 :constlen 4 :constbyval true :constisnull false :location 141 :constvalue 4 [ -89 -37 0 0 0 0 0 0 ]}) :location 133}) :location -1}

Elle est représenté au format pg_node_tree pour lequel il est possible d'écrire un parseur.

Le problème, c'est que je ne trouve pas les spécifications de ce format. Je n'ai rien trouvé dans la doc ou sur le web. J'ai commencé à faire du reverse sur le contenu de la colonne adbin en faisant varier son contenu mais c'est un travail conséquent...

Quelqu'un aurait il un lien vers une documentation ou des connaissances sur pg_node_tree ?

Merci d'avance
Olivier smile

Pied de page des forums

Propulsé par FluxBB