【发布时间】:2016-01-09 17:58:09
【问题描述】:
我正在使用Scala、Slick 和Postgres 来构建应用程序。我使用Slick code generator 来生成光滑的表格。
我想知道是否有任何方法可以验证数据库表架构和 slick 表架构是否匹配,并对我的应用程序中的所有 slick 表执行此操作。
例如:
class DepartmentTable(_tableTag: Tag) extends Table[Department](_tableTag, Some("base"), "Department") {
val id: Rep[Long] = column[Long]("DepartmentId", O.AutoInc, O.PrimaryKey)
val name: Rep[String] = column[String]("Name", O.Length(50,varying=true))
val shortCode: Rep[String] = column[String]("ShortCode", O.Length(50,varying=true))
def * = ???
def ? = ???
}
我更改了数据库表,例如在表中添加一列 parentDepartmentId,然后将其添加到 Slick 表中。很多时候,存在更改脚本未在测试数据库上运行的问题,因此我们将遇到一些运行时异常。
为了避免此类问题,我试图实现一些东西来检查光滑表是否与实际的 postgres 表匹配。可以实现吗?
我尝试了反射,但无法从光滑的桌子上获得所有细节。 eg:实际的列名
Slick Version : 3.0
我想要达到什么目的?
在应用程序启动时,我想将数据库架构与光滑架构进行比较。
我的计划:
从我的应用程序中获取所有 TableQuery / Slick 表
使用 Slick Meta 获取实际的数据库架构
将 slick tablequery 结构与实际 db 进行比较
现在,正如 Maxim 所建议的,我可以创建一个注册表并将每个表添加到注册表中。我只是想看看有没有其他方法。原因是如果我或其他人不小心删除了向注册表添加了几个表查询,则不会对该表进行检查。我只是想更安全,但不确定是否存在这样的方法。
【问题讨论】:
-
请消除 Slick 的
Table类(描述表的结构)和 之间的混淆,让您的问题一清二楚Slick 的TableQuery类的实例,它们代表Slick 中的实际数据库表。