C'est une solution de contournement à mon problème. Il résout le problème en utilisant la fonction PostgreSQL pour remplacer le ?
opérateur.
Je ne l'aime pas vraiment car cela ne rend pas PDO plus conforme à PostgreSQL. Mais je n'ai trouvé aucune vraie solution.
CREATE FUNCTION json_key_exists(JSONB,TEXT) RETURNS BOOLEAN LANGUAGE SQL STABLE AS $f$
SELECT $1 ? $2
$f$;
Et maintenant je peux utiliser la requête :
SELECT * FROM post WHERE json_key_exists(locations, :location);
La solution de contournement a été suggérée par le fabuleux RhodiumToad de freenode #postgresql
Modifier
Comme @Abelisto l'a suggéré, il n'est pas nécessaire de créer la fonction ci-dessus en tant que jsonb_exists(jsonb, text)
est disponible