我正在尝试使用 JSONB 中保存的日期编写准备好的语句。准备好的语句不允许包含运算符@>
,因此我使用了jsonb_contains
执行的函数名本身,但现在 postgres 不使用 gin 索引。
当我这样做时,在 psql 会话中测试性能非常好
select *
from tab
where jsonb_obj @> '{"date_el":"2001-01-31"}'
因为它使用杜松子酒索引。但这不会在 java 中的准备好的语句中解析。
当我在 psql 中运行它时:
select *
from tab
where jsonb_contains(jsonb_obj->>'date_el', '2001-01-31')
性能很差。
有没有人遇到过这个问题?
我假设您通过
PreparedStatement.setString()
.Postgres 需要 JSONB 值,而不是文本值。您可以通过将参数转换为 jsonb 来轻松克服这个问题: