Slick 的 PostgreSQL 扩展 Slick-pg

BSD
Scala 查看源码»
跨平台
2013-05-31
Tu_Minglei

疫情之下,程序员如何转型?共享数字化转型加速度,就在微软在线技术峰会>>>

Slick-pg 是一些针对 PostgreSQL 的 Slick 扩展,用于支持 PostgreSQL 的(特有)类型及/或相关函数。如果你对使用 Slick 来开发基于 PostgreSQL 的程序感兴趣,那么你会发现 slick-pg 非常有用。

有了它,我们就可以在 Scala/Slick 项目里自由的使用那些 PostgreSQL 特有的、因而 Slick 肯定不会内置支持的那些数据类型及其操作/函数来构造 SQL 查询了:

import MyPostgresDriver.simple._

class TestTable(tag: Tag) extends Table[Test](tag, Some("xxx"), "Test") {
  def id = column[Long]("id", O.AutoInc, O.PrimaryKey)
  def during = column[Range[Timestamp]]("during")
  def location = column[Point]("location")
  def text = column[String]("text", O.DBType("varchar(4000)"))
  def props = column[Map[String,String]]("props_hstore")
  def tags = column[List[String]]("tags_arr")

  def * = (id, during, location, text, props, tags) <> (Test.tupled, Test.unapply)
}

object tests extends TableQuery(new TestTable(_)) {
  ///
  def byId(ids: Long*) = tests.filter(_.id inSetBind ids).map(t => t)
  // will generate sql like: select * from test where tags && ?
  def byTag(tags: String*) = tests.filter(_.tags @& tags.toList.bind).map(t => t)
  // will generate sql like: select * from test where during && ?
  def byTsRange(tsRange: Range[Timestamp]) = tests.filter(_.during @& tsRange.bind).map(t => t)
  // will generate sql like: select * from test where case(props -> ? as [T]) == ?
  def byProperty[T](key: String, value: T) = tests.filter(_.props.>>[T](key.bind) === value.bind).map(t => t)
  // will generate sql like: select * from test where ST_DWithin(location, ?, ?)
  def byDistance(point: Point, distance: Int) = tests.filter(r => r.location.dWithin(point.bind, distance.bind)).map(t => t)
  // will generate sql like: 
  //   select id, text, ts_rank(to_tsvector(text), to_tsquery(?)) 
  //   from test 
  //   where to_tsvector(text) @@ to_tsquery(?) 
  //   order by ts_rank(to_tsvector(text), to_tsquery(?))
  def search(queryStr: String) = tests.filter(tsVector(_.text) @@ tsQuery(queryStr.bind))
		.map(r => (r.id, r.text, tsRank(tsVector(r.text), tsQuery(queryStr.bind))))
		.sortBy(_._3)
}

...


目前支持的 PostgreSQL 类型有:

  • ARRAY

  • JSON

  • Date/Time

  • Enum

  • Range

  • HStore

  • LTree

  • Inet/MacAddr

  • text Search

  • postgis Geometry


目前支持的 PostgreSQL 特性有:

  • inherits
  • Composite type (basic)
  • aggregate functions
  • window functions


的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

Slick-pg v0.15.0-M1 发布,Slick 的 PostgresSQL 扩展

Slick-pg v0.15.0-M1 发布了。Slick-pg 是一些针对 PostgreSQL 的 Slick 扩展,用于支持 PostgreSQL 的(特有)类型及/或相关函数。如果你对使用 Slick 来开发基于 PostgreSQL 的程序感兴趣,...

2016/07/11 06:29

Slick-pg v0.14.0 发布,Slick 的 PostgresSQL 扩展

Slick-pg v0.14.0 发布。 重大更新: 支持聚合函数 支持窗口函数 注:这些功能其实两年前就实现了,但合并到 slick 一直没有成功,所以,这次就干脆全做在 slick-pg 这端了。 --------------...

2016/05/09 17:34

Slick-pg v0.13.0 发布,Slick 的 PostgresSQL 扩展

Slick-pg v0.13.0 发布了,主要更新有: 支持 pg 9.5 原生的 `upsert` 支持(需要激活) 更多的 json 操作符/方法支持(如:||, -, #-, jsonb_set 等) ----------------------------------...

2016/04/25 13:00

Slick-pg v0.12.0 发布,Slick 的 PostgresSQL 扩展

Slick-pg v0.12.0 发布了,相比 v0.11,主要更新有: 增加了 circe-json 支持 Slick-pg 是一些针对 PostgreSQL 的 Slick 扩展,用于支持 PostgreSQL 的(特有)类型及/或相关函数。如果你对使...

2016/03/14 09:34

Slick-pg v0.10.0 发布,Slick 的 PostgreSQL 扩展

Slick-pg v0.10.0 发布,相比与上一个正式版 v0.9.2,这次的更新主要有: 升级到 slick v3.1.0 插件恢复用独立的 jar 发布(因为 @timcharper 在 #183 指出的问题) tsql 支持的增强 修复 bu...

2015/10/10 10:53

Slick-pg v0.10.0-RC1 发布,Slick的PostgreSQL扩展

这次的更新有: 升级到 slick v3.1.0-RC1 增强的 tsql 支持(合并了 #176 的 changes) 允许在 composite 支持中指定 class loader (在 #201 报告) 在发布 v0.10.0 的正式版以前,还打算把...

2015/09/16 11:34

Slick-pg v0.10.0-M2 发布,Slick 的 PostgreSQL 扩展

Slick-pg v0.10.0-M2 发布,主要改变: 升级到 slick v3.1.0-M2 修复了一个在 #201 报告的 bug 另有几个 issue #176、#183,或等待上游,或等待更多反馈,还没有做到主分支中。...

2015/08/24 20:58

slick-pg v0.9.2 发布,Slick 的 PostgreSQL 插件

slick-pg v0.9.2 发布,相比 v0.9.1,主要更新有: 升级到 slick v3.0.1 Plain SQL 支持增强:next array 扩展机制增强 Plain SQL 支持增强:为 slick-pg 扩展支持的 scala 类型增加了 `Get...

2015/08/10 11:33

slick-pg v0.9.1 发布,Slick 的 PostgreSQL 扩展

slick-pg v0.9.1 发布了。 这个版本的主要更新是, 在 composite type 支持中提供 hstore 类型支持 p.s. 在 @hsyed 贡献的初始实现中,hstore 是被忽略的,因为它字符输出中的“,”很容易干...

2015/07/26 09:52

Slick-pg v0.9.0 发布,PostgreSQL 的 Slick 扩展

Slick-pg v0.9.0 发布了。主要更新是 升级到了 slick v3.0.0,其他的倒没有什么特别值得一提的。 欢迎使用,祝各位愉快! Slick-pg 是一些针对 PostgreSQL 的 Slick 扩展,用于支持 PostgreS...

2015/05/04 09:35

没有更多内容

加载失败,请刷新页面

暂无问答

PostgreSQL 数据迁移 (从Mysql到Postgres)

之前使用的数据库是MySql,现在要改成PostgreSQL,因此需要将MySql表中数据也迁移过来. 下面是一些具体操作步骤.

2013/12/06 23:01
9.1K
0
Ubuntu 安装 postgresql

每天晚上疲劳的睡在床上时,才感觉真真切切地过了一天。人生最重要的不仅是努力,还有方向。压力不是有人比你努力,而是比你牛叉几倍的人依然比你努力。即使看不到未来,即使看不到希望,也依...

2014/04/29 11:41
5.4K
0
how to install PostgreSQL on ubuntu

1. This installs the database server/client, some extra utility scripts and the pgAdmin GUI application for working with the database. $ sudo apt-get install postgresql postgres...

2013/01/13 00:29
188
0
postgresql:pg_restore: [archiver] input file does

使用ps_restore恢复备份数据库出错:pg_restore: [archiver] input file does not appear to be a valid archive...

2015/03/24 11:15
513
0
Postgresql:用户“ postgres”的密码身份验证失败

我已经安装了PostgreSQL 8.4,Postgres客户端和Pgadmin3。控制台客户端和Pgadmin的用户“ postgres”的身份验证失败。 我已经输入了用户“ postgres”和密码“ postgres”,因为它以前可以工...

02/19 20:18
75
0
PostgreSQL 归档出错

Running out of disk space in the pg_xlog directory is a fairly common Postgres problem. This important directory holds the WAL (Write Ahead Log) files. (WAL files contain a reco...

2015/01/06 17:33
792
0
PostgreSQL的postgres_fdw跨库使用

Use postgres_fdw manipulate data cross database

2014/04/01 09:24
1.4W
4
postgresql 自动备份

自动备份脚本 @echo off @set Filename=%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%点%time:~3,2%分.backup @set Dirname=%date:~0,7% rem 如果当天是一号则新建新月份目录 @if %date:...

2013/02/22 09:10
3.3K
0
PostgreSQL的日志类型

刚开始学习postgres的时候,可能对PostgreSQL中的日志概念比较模糊,到底有多少种日志,哪些日志是能删除的,各自又记录什么样的功能。 PostgreSQL中有三种日志,pg_log,pg_xlog和pg_clog。...

2012/12/21 20:18
9.6K
1
初识Postgresql和Sqoop

最近在玩Hadoop、Hive、PostgreSql,因此结合上一篇文档记录一下本周工作内容,主要是环境的搭建和配置以及数据的生成与导入导出:在VirtualBox中安装CentOS6.4,并且搭建Hadoop1.2.1和Hive0...

2013/12/01 22:30
1.2W
3

没有更多内容

加载失败,请刷新页面

返回顶部
顶部