Toto je řešení mého problému. Problém vyřeší použitím funkce PostgreSQL k nahrazení ?
operátor.
Moc se mi to nelíbí, protože to neznamená, že PDO více vyhovuje PostgreSQL. Ale nenašel jsem žádné skutečné řešení.
CREATE FUNCTION json_key_exists(JSONB,TEXT) RETURNS BOOLEAN LANGUAGE SQL STABLE AS $f$
SELECT $1 ? $2
$f$;
A teď mohu použít dotaz:
SELECT * FROM post WHERE json_key_exists(locations, :location);
Řešení navrhl báječný RhodiumToad z freenode #postgresql
Upravit
Jak navrhl @Abelisto, není třeba vytvářet funkci výše jako jsonb_exists(jsonb, text)
je avialabe