sql—将硬编码查询从mysql迁移到postgresql

46scxncf  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(461)

嗨,我有一个“mysql”查询,如下所示:

... WHERE (maintenanceLockTimestamp + "+ delay+" SECOND) < CURRENT_TIMESTAMP ) ) "

问题是,我们需要从mysql迁移到postgresql,但是在执行同一个查询时,我得到:

Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "SECONDS"

我在这里查过:https://www.postgresqltutorial.com/postgresql-date-functions/
而且第二个函数在postgresql中似乎不存在,您知道有什么替代方法吗?
谢谢

koaltpgm

koaltpgm1#

在postgres中,您可以使用:

where maintenanceLockTimestamp + :delay * interval '1 second' < current_timestamp

请注意,使用参数可以避免用文本值来填充查询字符串。
在这两个数据库中,最好使用 current_timestamp :

where maintenanceLockTimestamp < current_timestamp - ? second  -- MySQL
where maintenanceLockTimestamp < current_timestamp - :delay * interval '1 second'  -- Postgres

这允许优化器在上使用索引 maintenanceLockTimestamp 为了表现。

相关问题