scala slick postgresql 创建 table 模式

scala slick postgresql create table schema

我是 slick 的新手,请查看这个简单的代码:

import slick.driver.PostgresDriver.api._
import slick.lifted.{ProvenShape, Tag}

case class Person(id: Int, name: String)

class Persons(tag: Tag) extends Table[Person](tag, "persons") {

  val id: Rep[Int] = column[Int]("id", O.PrimaryKey)
  val name: Rep[String] = column[String]("name")

  override def * : ProvenShape[Person] = (id, name) <> (Person.tupled, Person.unapply)
}

object MainRunner extends App {

  val dbUrl = "jdbc:postgresql://172.17.0.2/slick-test";
  val dbUsername = "username"
  val dbPassword = "password"
  val dbDriver = "org.postgresql.Driver"

  val db = Database.forURL(url = dbUrl, driver = dbDriver, user = dbUsername, password = dbPassword)

  val persons = TableQuery[Persons]
  val queries = DBIO.seq(
    persons.schema.create
  )
  val setup = db.run(queries)
  println(setup)
}      

您认为这段代码有问题吗?
此代码编译 运行 没有任何问题(错误或异常)
但无法创建 table 架构 !
怎么了 ?

如果您刚开始使用 play+slick,也许这个项目可以帮助您:

我认为这与会话无关(Slick 3.x 中没有这样的东西)。您遇到的问题是您没有等到操作完成(应用程序在创建模式之前完成;即 - 在 Future 执行之前)。

更改这些行:

val setup = db.run(queries)
println(setup)

至(注意新导入):

import import scala.concurrent.duration.DurationLong
import scala.concurrent.{Await, Future}
...
...
val setup = db.run(queries).foreach(_ => println("Done, schema created!))
Await.result(setup, 5L.seconds)