PostgreSQL には ? という演算子があって、JSONB型に対して文字列の検索が行える。

-- true を返す
SELECT '["a", "b", "c"]' ? 'a';

-- 管理者検索
SELECT *
FROM users
WHERE roles ? 'ADMIN';

といった使い方ができる。

ところが、例えば DOMA のようなフレームワークやバックエンドで JDBC を使っているツールなどではエラーとなる。

これを避けるためには ? をエスケープしてやればよくて、

-- true を返す
SELECT '["a", "b", "c"]' ?? 'a';

-- 管理者検索
SELECT *
FROM users
WHERE roles ?? 'ADMIN';

としてやればよい。