Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 13/10/2017 11:43:34
- olivierauverlot
- Membre
Comprendre le format pg_node_tree
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
Hors ligne
#2 13/10/2017 12:41:42
- Marc Cousin
- Membre
Re : Comprendre le format pg_node_tree
Ça n'est effectivement pas documenté à l'extérieur du code. Le mieux pour commencer à creuser, à mon avis, ça serait de partir du code de pg_get_expr. Ou bien utiliser la fonction directement, vu qu'elle sert à convertir un adbin en contrainte SQL...
Marc.
Hors ligne
#3 13/10/2017 15:07:01
- olivierauverlot
- Membre
Re : Comprendre le format pg_node_tree
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
Hors ligne
#4 13/10/2017 15:51:58
- Marc Cousin
- Membre
Re : Comprendre le format pg_node_tree
Oui. Donc le code de la fonction (et surtout de celles qu'elle appelle). Bon appétit
Marc.
Hors ligne
Pages : 1