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 は、 と の間に演算子がないと不平を言っていtimestamp with time zoneます。

interval を timestamp に変換するにはどうすればよいですか?

4

1 に答える 1

3

不可能な変換は問題ではなく、評価順序の問題です。引数の順序を変更せずに、括弧を付けて記述できます。

interval '5 minutes' - (current_timestamp - state_change)

interval-intervalがサポートされているため、機能します。interval-timestampが最初に評価され、実装されていないため、括弧がないと機能しません。

補足として、pidは で一意であるため、次のようpg_stat_activityGROUP BY pidandMINを抑制する必要があります。

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 に答える