我正在使用Slick 3.0访问Play 2.4中的PostgreSQL数据库,并且需要一种方法来删除表中的所有行而不丢弃它。
删除单行有效:
lazy val tasks = TableQuery[Tasks]
def delete(id: Long) = db.run(tasks.filter(_.id === id).delete)
但我无法弄清楚如何在光面中实现一个空的where子句来删除所有行。 (As seen in PostgreSQL documentation)
简单的解决方案db.run(tasks.delete)
似乎没有做任何事情,似乎没有truncate
函数可用。
修改
db.run(tasks.delete)
有效,你只需要等待Future完成。截断表需要一些SQL:db.run(sqlu"TRUNCATE TABLE table_name RESTART IDENTITY;")
。
答案 0 :(得分:0)
由于您已经得到答案,我想补充一点,如果您想让程序等待db查询完成,您还可以使用Await.result
包中的scala.concurrent
函数。查询是这样的:
Await.result(db.run(sqlu"TRUNCATE TABLE table_name RESTART IDENTITY;"),Duration.Inf))