Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Dans du code PL, j'ai besoin d'aller parcourir des clés étrangère dans le information_schema.
Les colonnes "sources" de la clé peuvent être trouvées dans information_schema.key_column_usage où il y a bien un ordinal_position qui me dit dans quel ordre prendre les colonnes dans la définition de la clé.
Les colonnes "cibles" peuvent être trouvées dans information_schema.constraint_column_usage mais là je n'ai pas de "ordinal_position".
À quel endroit je peux trouver l'ordre des colonnes de la table vers laquelle pointe la FK ?
Hors ligne
Bonjour,
Vous avez l'information dans information_schema.key_column_usage.position_in_unique_constraint, mais il faut pour cela utiliser la contrainte unique utilisée par la clé étrangère.
Le catalogue postgres est peut être plus adapté pour ça, voir https://www.postgresql.org/docs/current … raint.html.
Julien.
https://rjuju.github.io/
Hors ligne
Bonjour,
Vous avez l'information dans information_schema.key_column_usage.position_in_unique_constraint, mais il faut pour cela utiliser la contrainte unique utilisée par la clé étrangère.
Le catalogue postgres est peut être plus adapté pour ça, voir https://www.postgresql.org/docs/current … raint.html.
Oui effectivement, je suis finalement passé par pg_catalog et ça fonctionne ; mais j'ai toujours un peu la trouille que pg_catalog change lors d'un upgrade de version majeure...
Edit : Pour ceux qui rencontreraient ce genre de problème, ça fait du code qui ressemble à ça :
DECLARE
...
colcur_f CURSOR (cname text, carr INT[]) FOR
select column_name,ordinal_position from information_schema.columns t, unnest(carr) WITH ORDINALITY a(elem, nr) where t.ordinal_position = a.elem AND t.table_name = cname and t.table_schema = 'public' order by a.nr;
...
BEGIN
...
-- On récupère le tableau des colonnes sources de la FK
select c.confkey,c.conname INTO l_colarray,l_table_cible from pg_catalog.pg_constraint c , pg_catalog.pg_namespace n
where n.oid = c.connamespace AND n.nspname='public' and conname=lfkcur.constraint_name;
RAISE NOTICE 'Clefs trouvées % sur % ',l_colarray,l_table_cible;
...
FOR lcolcur IN colcur_f(l_table_cible, l_colarray) LOOP
...
Dernière modification par herve.lefebvre (16/02/2022 16:30:47)
Hors ligne
Pages : 1