Postgresql-Performance

包含 JSONB 的 postgresql 準備好的語句

  • January 6, 2021

我正在嘗試使用 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)

引用自:https://dba.stackexchange.com/questions/274055