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 !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème sur notre serveur une intervention a été planifiée ce  matin. La coupure, qui ne devait pas exéder 5 mn, a duré plus longtemps que prévu. L'intervention consistait à l'augmentation de l'espace disque (GeoRezo prend un peu plus de place en viellissant). Malheureusement, le serveur se faisant vieux, quelques soucis ont eu lieu.

Nous avons procédé à un gros nettoyage d'automne : augmentation de l'espace disque, mise à jour des certificats SSL pour l'utilisation des  urls en https, upgrade d'Apache et autres outils nécessaire au bon fonctionnement.

Notre volonté à long terme est de consolider la plateforme GeoRezo et nous accueillons toutes personnes intéressées pour nous aider (technologies utilisées : drupal, docker, MySQL, git, etc.) Si vous désirez contribuer à un projet dynamique et apprendre de nouvelles choses, contactez nous !

L'équipe GeoRezo

#1 dim. 02 avril 2017 15:23

demo972
Membre
Date d'inscription: 1 mars 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 (dim. 02 avril 2017 15:24)

Hors ligne

 

#2 dim. 02 avril 2017 17:18

dbaston
Membre
Lieu: Montpelier
Date d'inscription: 3 juin 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 dim. 02 avril 2017 18:57

Nicolas Ribot
Moderateur
Lieu: Toulouse
Date d'inscription: 9 sept. 2005
Messages: 1015

Re: méthode utilisée pour une vérification ?

Nice !

Nicolas

Hors ligne

 

#4 dim. 02 avril 2017 22:23

demo972
Membre
Date d'inscription: 1 mars 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

Partagez  |