Slick不会在AWS postgres DB

时间:2016-07-06 21:02:52

标签: postgresql amazon-web-services slick-3.0

我们在AWS上遇到了slick 3.0和postgres数据库(9.5)的问题,其中slick打开一个事务但似乎没有提交它,留下一个打开的连接"空闲的事务"期货永远不会完成。

我们只是致电db.run(saveRow(row).transactionally.asTry),其中

private def saveRow(row: Row): DBIO[Int] = {

  val getExistingRow: DBIO[Option[Row]] = table.filter(_.id === row.id).result.headOption

  getExistingRow.flatMap((existingRow: Option[Row]) =>
    existingRow match {
      case None => table += row
      case Some(row) =>
        table.filter(_.id === row.id).map(_.propety).update(row.property)
    }
  )
}

现在,从getExistingRow创建的第一个select语句尚未完成。它在本地工作,但在AWS上生产时,所有准备好的语句都不会被提交。来自slick.backend的日志只显示

#1: Start transaction
#2: StreamingInvokerAction$HeadOptionAction [select ...]

我们希望从slick.backend(我们在本地看到它们)获得以下更多日志,但我们不会看到它们。

#3: SingleInsertAction [insert into ...]
#4: Commit

我是否需要提供一些配置设置才能在Slick,HikariCP或postgres数据库一侧工作,以解决这个问题?关于如何解决这个问题的任何其他想法?

1 个答案:

答案 0 :(得分:0)

它实际上是由使用播放执行上下文引起的。当切换到scala默认执行上下文时,它工作正常。