Postgresql-Performance
包含 JSONB 的 postgresql 準備好的語句
我正在嘗試使用 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')
性能很差。
有沒有人遇到過這個問題?
我們看到的錯誤是“操作符不存在:jsonb @> text”
我假設您通過
PreparedStatement.setString()
.Postgres 需要 JSONB 值,而不是文本值。您可以通過將參數轉換為 jsonb 來輕鬆克服這個問題:
select * from tab where jsonb_obj @> cast(? as jsonb)