0

我想执行这个简单的查询:

SELECT
    pid,
    MIN(interval '5 minutes' - current_timestamp - state_change)
FROM
    pg_stat_activity
AND
    current_timestamp - state_change <= interval '5 minutes'
GROUP BY 
    pid
ORDER BY
    2 ASC
LIMIT 1;

interval但是 PG 抱怨and之间没有运算符timestamp with time zone

如何将我的时间间隔转换为时间戳?

4

1 回答 1

3

不可能的转换不是问题,而是评估顺序的问题。在不改变参数顺序的情况下,您可以用括号编写它:

interval '5 minutes' - (current_timestamp - state_change)

并且它会工作,因为interval-interval得到支持。没有括号它就不起作用,因为interval-timestamp将首先被评估并且它没有被实现。

作为旁注,由于pid在 中是唯一的pg_stat_activity,应该抑制 and ,如GROUP BY pidMIN

SELECT
    pid,
    interval '5 minutes' - (current_timestamp - state_change)
FROM
    pg_stat_activity
WHERE
    current_timestamp - state_change <= interval '5 minutes'
于 2013-10-04T17:29:12.550 回答