使用 Play 和 Slick 时我应该如何处理数据库演变?我必须手动写 SQL 吗?

How should I handle database evolutions when using Play and Slick? Must I manually write SQL?

我正在查看 "Hello Slick" 教程。用户 table 被定义,然后使用 users.schema.create 创建(github 上的代码已经过时,所以那里有 users.ddl.create,但是当我在 Activator 中创建应用程序时,它是 schema 因为它使用的是 Slick 3.0.0,已经足够接近了)。但是,如果我第二次 运行 应用程序,则会出现错误,因为 table 已经存在。我没有看到像 users.schema.createIfNotExists 这样的选项,这有点令人惊讶。但是无论如何,如果我在将来的某个时候向 table 添加一列,我将需要更复杂的东西。那么 Slick 没有办法帮助 migrations/evolutions 吗?

我正在使用 Play,并且据推测 Play Slick has special support for database evolutions. It's not clear what is offered in addition to the usual Play evolutions 是 Slick 特有的:我们只是被告知要添加依赖项。我看不到任何进一步的文档。

我是否必须为进化(1.sql、Ups、Downs 等)手动编写 SQL?如果是这样,那么必须另外编写 column[Int]("ID", O.PrimaryKey, O.AutoInc) 之类的代码似乎很愚蠢。我为重复工作而烦恼,并担心如果我的 SQL/DDL 是错误的,当我访问数据库时会出现细微的错误。我可能是错的,但我似乎记得在 Django 中更改模型后可以自动生成迁移,所以这似乎不是一个无法解决的问题。这只是没有实现的东西还是我遗漏了什么?

如果相关的话,我正在使用 PostgreSQL。

您可以使用 slicks 模式代码生成功能:

http://slick.typesafe.com/doc/3.0.0/code-generation.html

这样,如果您更新数据库模式,您就不必手写漂亮的 类 来对应 table 这会为您完成。