PostgreSQL hstore

PostgreSQL hstore 扩展使用详解
本文详细介绍了如何在 PostgreSQL 中使用 hstore 扩展来操作 key/value 类型的数据,并提供了具体的 SQL 查询示例及 Java 代码实现。
public class BatchSearchUtil {
       /**
        * 注意:因为select的只有id,所以可用的也就只有id,其他字段如果想获取值,要在select后加字段名称,不然会报错
        * @param lot
        * @param line
        * @param date
        * @param pi
        * @return
        */
       public static List<Batch> serchBatch(String lot, String line, String date, String pi) {
              List<Batch> batchIdList = new ArrayList<Batch>();
              String sql = "select b.id from t_batch b where ext::hstore @> 'lot=>" + lot + ",line=>" + line + ",pi=>" + pi + ",date=>" + date + "'";
              RawSql rawSql = RawSqlBuilder.parse(sql).create();
              Query<Batch> query = Ebean.find(Batch.class);
              batchIdList = query.setRawSql(rawSql).findList();
              return batchIdList;
       }
       public static List<Batch> serchBatch(String pi) {
              List<Batch> batchIdList = new ArrayList<Batch>();
              String sql = "select b.id,b. from t_batch b where ext::hstore @> 'pi=>" + pi +"'";
              RawSql rawSql = RawSqlBuilder.parse(sql).create();
              Query<Batch> query = Ebean.find(Batch.class);
              batchIdList = query.setRawSql(rawSql).findList();
              return batchIdList;
       }
}

先前曾跟大家说起过ext字段的用法,简单提到PostgreSQL对这种key/value数据类型的强大支持,但并没有举例,现在补上:

 

create extension hstore; -- 对当前数据库启用hstore扩展,支持key/value的就是该扩展

create table a(id bigint, ext text, primary key (id)); -- 注意ext字段不一定要是hstore类型的,这里的text相当于varchar

insert into a values(1, 'x=>1,y=>2,z=>"z"'); -- 这段字符串就是hstore的标准写法

select ext::hstore from a; -- 这里的::hstore是PG的语法用于将text/varchar转换为hstore数据类型

select * from a where ext::hstore -> 'x'='1'; -- 查出所有ext中x这个键对应的值为1的记录

select * from a where ext::hstore ? 'y'; -- 查出所有ext具备y这个键的记录

select * from a where ext::hstore @> 'x=>1,y=2'::hstore; -- 查出所有同时满足x=1、y=2的记录

update a set ext = (ext::hstore||'d=>"d"'::hstore)::text where id = 1; -- 更新记录1,追加(或更新)一组key/value(d=>"d")


转载于:https://my.oschina.net/liyonglee/blog/346554

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值