Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 10 · Application directe du cours
Un paramètre sans type
PostgreSQL et les migrations · niveau 2
Énoncé
Expliquer pourquoi la recherche du catalogue fonctionnait sur H2 et échoue sur PostgreSQL avec function lower(bytea) does not exist, et pourquoi le filtre par rayon seul déclenche l'erreur.
Corrigé
Quand un filtre est absent, le service passe null, et le pilote JDBC envoie un paramètre nul sans type. Dans :q is null, ce n'est pas gênant ; mais dans concat('%', :q, '%'), PostgreSQL doit choisir un type pour ce paramètre, et sans indice il ne choisit pas le texte : la concaténation donne des octets (bytea), et lower n'existe pas pour des octets. H2 infère les types autrement et suppose une chaîne. Le filtre par rayon seul déclenche l'erreur parce que c'est alors q qui est nul ; la même requête avec un q renseigné fonctionnait. cast(:q as String) donne le type, et la requête marche sur les deux moteurs.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.