Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#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: 1534

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