【发布时间】:2021-01-07 19:17:27
【问题描述】:
我正在创建一个删除查询,我需要在其中调用本机 Postgres 函数来过滤应删除的记录。
总而言之,查询如下:删除所有 start_at 列(时间戳)超过 5 天的记录(查询的动态参数)。
对于原生 SQL,查询如下:
delete from my_table t where date_part ('day', (current_date - t.start_at))> = 5
在我的 Kotlin 编码中,我无法实现此查询。公开文档中的示例没有具有更复杂过滤器的代码。我知道是这样的:
(1)
transaction {
MyTable.deleteWhere {
MyTable.startAt greaterEq ??????
}
}
或
(2)
transaction {
exec ("delete query here> = $ {daysToFilter}")
}
有没有办法在示例 (1) 之后的代码中执行此查询? 如果不是,那么执行此查询的最佳方法是什么?
示例数据集:
| id | start_at |
|---|---|
| 1 | 2020-09-01 09:00:00 |
| 2 | 2020-09-02 09:00:00 |
| 3 | 2020-09-03 09:00:00 |
| 4 | 2020-09-04 09:00:00 |
【问题讨论】:
-
请注意,
where t.created_at < current_date - 120将是一个更有效的查询,因为它可以利用created_at上的索引 -
扩展 @a_horse_with_no_name 建议,如果您预先在 kotlin 中预先计算
current_date - 120days,那么在 kotlin 中实现将变得微不足道。无论哪种方式,从阅读 this issue 看来,基本数学应该是可能的 -
@JensV:你不能只使用例如参数化查询吗?
delete from my_table where created_at < current_date - ?然后传递一个整数值?至少在 JDBC 中是这样的 -
@a_horse_with_no_name 当然,我不使用暴露的,但不知道他们是否有办法表达
current_date用于查询 -
@a_horse_with_no_name 您需要某种方式将其添加到查询中。我只是想知道你是怎么做到的,但我在这里找到了它:github.com/JetBrains/Exposed/blob/… 该项目的文档似乎严重缺乏
标签: postgresql kotlin kotlin-exposed