2017-05-19 11 views
1

쿼리가 데이터를 반환하는 경우 알림을 보내도록 매시간 실행해야하는 쿼리가 있습니다. 근무 외 시간에 변경 사항을받지 않으려면 현재 시간이 오전 12시에서 오전 7시 사이 인 경우이 쿼리를 실행하지 마십시오. 는 SQL은 현재 상태에서 어떻게 보이는지Postgres : 현재 시간이 범위 내에있는 경우 쿼리를 실행하지 마십시오

은 다음과 같습니다가 오프 시간 동안 실행되지 않도록

SELECT * FROM (
    SELECT FLOOR(EXTRACT(EPOCH FROM (now() - updated_at))/60) :: INT as minutes_since_update 
    FROM table_a 
     WHERE column_a IS TRUE AND column_b IS NULL 
    LIMIT 1) a 
WHERE minutes_since_update > 60 

가 어떻게이 쿼리를 변경할 수 있습니다.

나는 이것을 시도했지만, 왜 효과가 없는지는 분명하지 않다.

SELECT * FROM (
    IF (SELECT CURRENT_TIME BETWEEN '04:00:00' AND '11:00:00') THEN 
     SELECT 0 as minutes_since_update FROM table_a where true = false; 
    ELSE 
     SELECT FLOOR(EXTRACT(EPOCH FROM (now() - updated_at))/60) :: INT as minutes_since_update 
     FROM table_a 
      WHERE column_a IS TRUE AND column_b IS NULL 
     LIMIT 1; 
    END IF; 
) a 
WHERE minutes_since_update > 60 
+1

같은 것을 사용해야합니까? – joop

답변

0

절을 WHERE 조건에 넣으면됩니다.

SELECT FLOOR(EXTRACT(EPOCH FROM (now() - updated_at))/60) :: INT as minutes_since_update 
FROM table_a 
WHERE column_a IS TRUE AND column_b IS NULL 
AND CURRENT_TIME BETWEEN '00:00:00' AND '07:00:00' 
LIMIT 1; 

, 나는 아마 왜 WHERE 절에 추가 pg_cron