在postgres中动态查询jsonb列

xzabzqsa  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(395)

我有一个专栏 carInfo 带类型 jsonb 在我的postgresql数据库的一个表中。示例行如下所示:

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

我知道在postgresql中,您可以通过以下方式进行查询:

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

但是我想使这个查询成为动态的(通过使用postgresql函数或者别的什么),这样我就可以从我的java应用程序中查询它了。我想重用同一个查询,即使我想更深一层,例如

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

你知道我怎样才能做到吗?

xu3bshqb

xu3bshqb1#

可以使用contains运算符 @> ```
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)索引,这在 `->` 链条。

相关问题