postgresql - 优化数据库操作 Slick 3

标签 postgresql scala slick

我用 Slick 创建了一个数据库。我正在尝试创建表的模式,选择一些信息等等。这是我的模式创建代码:

val createUserTable = UserTable.table.schema.create
val createTaskTable = TaskTable.table.schema.create
Await.result(db.run(DBIO.seq(Queries.createUserTable, Queries.createTaskTable)), 2 seconds)

这段代码工作得很好,但我不想在每个查询中都使用 Await.result。我正在寻找的是至少按目的(创建、选择等)批量执行它们。我可以创建此方法来传递不同的操作:

def executeAction[T](action: DBIO[T]) =
    Await.result(db.run(action), 2 seconds)

所以我很好奇如何更改它以传递一些包含一系列查询的数据结构?例如,List(createUserTable, createTaskTable)

感谢您的帮助!

最佳答案

避免等待每个 DBIO 操作的两种方法

  1. 创建 DBIO 操作列表并使用 DBIO.seq 收集它们并执行。

  2. 使用 for-comprehension 将所有 DBIO Action 组合成一个 DBIO Action 。

这将帮助您反复使用 await 来等待中间 DBIO 操作的结果。

在这两种情况下,您必须至少使用一次 Await.result 在主线程中等待结果(即停止主线程退出)。

关于postgresql - 优化数据库操作 Slick 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47489374/

相关文章:

python - 如果 None 或 Null,则从查询中删除对象

scala - 如何在光滑中保留枚举值

ruby-on-rails - Rails + Postgres 丢弃错误 : database is being accessed by other users

PostgreSQL:如何启用 autovacuum?

ruby-on-rails - 如何只做积极的 int 领域?

json - 将 PostgreSQL JSON 类型与 Slick 2 代码生成器一起使用

scala - 如何计算 Slick 中连接返回的行数?

java - 使用 maven 损坏 zip 中的 JARS

scala - 为什么 sbt 认为这是一个 'unknown artifact?'

scala - 确保 're-start' 任务在 :test 之前自动运行