所以我试图实现一个从我的数据库到我的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中实现那个条件索引?
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
在这些测试中,。