使用scala使用slick获取条件索引。

问题描述 投票:0回答:1

所以我试图实现一个从我的数据库到我的slick表的索引。我使用postgres作为我的数据库,我的索引是这样的。

"index_unq_user_status" UNIQUE, btree (user_id) WHERE status::text = 'Pending'::text

基本上,不能有两行相同的user_id 如果它们都是 "待定 "状态的话。

我的问题在哪里?当我用Slick生成我的表时,我得到了这样的结果。

val index1 = index("index_unq_user_status", userId, unique=true)

意思是说,只能是一行有一个用户ID。

我想用h2数据库做一个集成测试,它使用了Slick的表,并且创建了错误的索引。

有没有什么方法可以在slick中实现那个条件索引?

scala slick scalatest
1个回答
0
投票

Sick没有内置或直接支持部分索引。

然而,正如你的 "index_unq_user_status",你的 index1 正在创建SQL DDL语句来改变模式(如果你应用它们),你可以做的是:删除 index1,而不是在你应用表查询之后 .schema.create 你可以运行一个普通的SQL语句来应用你的索引。

大致来说,就是这样的。

val addIndex = sqlu""" ALTER TABLE table ADD INDEX ... """
val createAction = (MyTable.schema.create andThen addIndex)

我不知道你是如何构建你的H2集成测试的,但你可以有条件地省略PG特有的... ... addIndex 在这些测试中,。

© www.soinside.com 2019 - 2024. All rights reserved.