簡體   English   中英

在 Postgres 中動態查詢 jsonb 列

[英]Query a jsonb column dynamically in Postgres

我在 PostgreSQL 數據庫中的一個表中有一個類型為jsonb的列carInfo 示例行如下所示:

{
   "name":"John",
   "age":25,
   "car":{
      "brand":"KIA",
      "year":2015
   }
}

我知道在 PostgreSQL 中可以這樣查詢:

select * from car where carInfo -> 'name' = 'John'

但我想讓這個查詢動態化(通過使用 PostgreSQL 函數或其他東西),以便我可以從我的 Java 應用程序中查詢它。 例如,即使我想將 go 更深一層,我也想重用相同的查詢

select * from car where carInfo -> 'car' -> 'brand' = 'KIA'

知道如何實現這一目標嗎?

您可以使用包含運算符@>

select *
from car
where car_info @> '{"name": "John"}';

或者

select *
from car
where car_info @> '{"car": {"Brand": "KIA"}}';

在您的 Java 代碼中,您可以編寫一個 PreparedStatement 來處理兩者:

String sql = "select * from car where car_info @> cast(? as jsonb)";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, "{\"car\": {\"Brand\": \"KIA\"}}";
ResultSet rs = pstmt.executeQuery();

使用@>運算符還有一個額外的好處,即 Postgres 可以在該列上使用 (GIN) 索引,而這在->鏈中是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM