Vous n'êtes pas identifié(e).

#1 12/04/2013 11:22:48

guegs
Membre

Pb du à migration V8.3 -> V9.2.4

Bonjour,
je suis un petit nouveau sur Postgresql et même en informatique tout court. Je bosse en stage sur la migration vers la V9.2.4.
Je suis confronté à quelques difficultés de transtypages, et autres subtilité que je découvre au fur et à mesure du debug de l' application.

Voici mon pb:

j'ai la requête suivante :
   SELECT               
CASE EXTRACT(month from nomdebase.date_debut + interval '3 days')         
WHEN 1 THEN 'janvier'         
WHEN 2 THEN 'février'         
WHEN 3 THEN 'mars'         
WHEN 4 THEN 'avril'         
WHEN 5 THEN 'mai'         
WHEN 6 THEN 'juin'         
WHEN 7 THEN 'juillet'         
WHEN 8 THEN 'août'         
WHEN 9 THEN 'septembre'         
WHEN 10 THEN 'octobre'         
WHEN 11 THEN 'novembre'         
WHEN 12 THEN 'décembre'   
END
  FROM nomdebase
  group by EXTRACT(month from nomdebase.date_debut + interval '3 days') 
celle ci fonctionne bien sur V8.3 mais plus sur V9.2 avec ce message d'erreur:

ERREUR:  la colonne «  nomdebase.date_debut » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat
LINE 2: CASE EXTRACT(month from  nomdebase.date_debut + interval '3 days') ...
                                ^

********** Erreur **********

ERREUR: la colonne «  nomdebase.date_debut » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat
État SQL :42803
Caractère : 173

J 'ai corrigé le pb en mettant un alias sur le "case" et en faisant un group by "mon alias", ce qui donne:

  SELECT               
CASE EXTRACT(month from nomdebase.date_debut + interval '3 days')         
WHEN 1 THEN 'janvier'         
WHEN 2 THEN 'février'         
WHEN 3 THEN 'mars'         
WHEN 4 THEN 'avril'         
WHEN 5 THEN 'mai'         
WHEN 6 THEN 'juin'         
WHEN 7 THEN 'juillet'         
WHEN 8 THEN 'août'         
WHEN 9 THEN 'septembre'         
WHEN 10 THEN 'octobre'         
WHEN 11 THEN 'novembre'         
WHEN 12 THEN 'décembre'   
END as essai
  FROM nomdebase
  group by essai

Donc ça marche sauf que je ne peut pas me permettre de réécrire les requêtes, donc connaitriez-vous une astuce pour de nouveau pourvoir exécuter la première requête?
Peut être peut on assigner un alias par défaut lors d'une condition case en faisant un polymorphisme de cette fonction,... ou autre je ne sais pas.
Merci

PS: si vous avez une expérience dans le même type de migration et que vous êtes prêt a la faire partager, n’hésitez pas à me contacter.
Guegs

Hors ligne

#2 13/04/2013 03:11:50

gleu
Administrateur

Re : Pb du à migration V8.3 -> V9.2.4

Je suis très étonné que la première requête passait, quelque soit la version. Mais bon, non, vous n'avez pas d'autres choix que de les corriger.


Guillaume.

Hors ligne

Pied de page des forums