banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

dbaston
Juste Inscrit !
Lieu: Montpelier
Date d'inscription: 3 Jun 2016
Messages: 7
Site web

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

 

Pied de page des forums

Powered by FluxBB