Votre instruction préparée transfère full_address en text (type de texte intégré à Postgres), alors qu'il semble que votre table soit créée avec un citext (insensible à la casse) type de texte (ou, il vous manque un index sur full_address::text ). Essayez peut-être de créer un index sur full_address::text et voyez si votre relevé préparé le reprendra.
Une autre option consiste à utiliser un text tapez pour l'full_address colonne, puis créez un index fonctionnel sur lower(full_address) -- l'appétence de cette option dépend de vos besoins.
Je pense qu'une partie du problème est que JDBC ne connaît pas le citext tapez so sauf si vous pouvez demander à JDBC d'envoyer votre adresse à la base de données en tant que citext type, il va être interprété par le planificateur de requêtes comme text , tout comme votre setString() méthode le fait probablement.
Fait intéressant, j'ai j'ai récemment rencontré un problème similaire
Divulgation :je travaille pour EnterpriseDB (EDB)