#1 Sun 02 April 2017 15:23
- demo972
- Participant occasionnel
- Date d'inscription: 1 Mar 2012
- Messages: 18
méthode utilisée pour une vérification ?
Bonjour à tous !
J'aurais une question sur la méthode que j'utilise.
Je dois générer une table répertoriant pour chaque ligne les colonnes qui sont null.
Par exemple j'ai une table comme ceci :
Code:
col_1 | col_2 | col_3 | -----------------+----------------+--------------+ 1 | null | null 2 | xxxx | null
J'arrive avec une fonction plpgsql à obtenir une table en sortie ayant une structure comme ceci :
Code:
col_1 | col_erreur | -----------------+-----------------------------------+ 1 | col_2[null] col3[null] | 2 | col_3[null] |
Pour arriver à ce résultat j'ai fait une fonction en plpgsql qui parcourt toutes les lignes de la table concernée et me retrouve les colonnes ou il y a des valeurs null :
Code:
FOR rowin IN SELECT * FROM table LOOP IF rowin.col IS NULL THEN col_error := col_error || ' col [VAL NULL] '; END IF;
Cependant je n'ai pas l'impression que se soit la meilleur méthode afin d'arriver à ce résultat.
Après j'aurais pu faire un simple select avec toutes les colonnes concernés par ma vérification. Cependant ce qui m’intéresse vraiment c'est d'avoir dans mon message d'erreur la ou les colonnes concernées par ligne.
Ma question est, n'y aurait-il pas un moyen plus simple de faire ? (Si il y en a un bien-sure)
Merci d'avance de vos réponses.
Bonne journée
Dernière modification par demo972 (Sun 02 April 2017 15:24)
Hors ligne
#2 Sun 02 April 2017 17:18
Re: méthode utilisée pour une vérification ?
Bonjour,
Avec les fonctions json vous pouvez générer une telle table sans ayant à utiliser PLPGSQL. Je laisse à vous de décider si cette méthode est vraiment plus simple, j'en suis pas certain.
Voici une exemple de la requête:
Code:
SELECT col_1, string_agg((kv).key || '[null]', ' ') FILTER (WHERE (kv).value IS NULL) AS col_erreur FROM (SELECT (f).col_1, jsonb_each_text(to_jsonb(f)) kv FROM (SELECT * from ma_table) f) sq GROUP BY col_1 ORDER BY col_1;
La clé, c'est la paire de fonctions to_jsonb et jsonb_each_text qui transforment effectivement vos données de leur forme originale:
Code:
col_1 | col_2 | col_3 -------+-------+------- 1 | 7 | 2 | | 8 3 | 2 | 9
à la forme suivante:
Code:
kv ----------- (col_1,1) (col_2,7) (col_3,) (col_1,2) (col_2,) (col_3,8) (col_1,3) (col_2,2) (col_3,9)
Je crois que ces deux fonctions sont disponibles à partir de la version 9.4 ou 9.5 de postgresql.
Daniel
Hors ligne
#3 Sun 02 April 2017 18:57
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: méthode utilisée pour une vérification ?
Nice !
Nicolas
Hors ligne
#4 Sun 02 April 2017 22:23
- demo972
- Participant occasionnel
- Date d'inscription: 1 Mar 2012
- Messages: 18
Re: méthode utilisée pour une vérification ?
Merci de votre réponse rapide je teste tout cela afin de voir ce que ça donne.
ps: En effet la fonction to_jsonb n'est disponible qu'à partir de la version 9.5 de postgresql.
Hors ligne