2012-05-16 4 views
0

나는 데이터베이스에 트랜잭션 시작 시간을 기록하고 각 트랜잭션에 대한 시간 제한이 있습니다. 시간이 초과되면 경보를 발생시키고 싶습니다. 이 일을 생각할 수있는 두 가지 방법이 있습니다.postgresql에서 시간 계산

1) 제한을 초과하는 레코드를 선택할 수 있도록 데이터베이스가 자동으로 계산을 수행하도록하십시오.

2) 스크립트에서 함수를 호출하고 현재 시간을 제공하고 데이터베이스에서 각 트랜잭션의 시간을 계산 한 다음 오래된 것을 선택하십시오.

나는 첫 번째 솔루션을 선호하지만 어떻게해야할지 모르겠다. PostgreSQL을 사용하고 있습니다. 아무도 도와주지? 감사.

답변

0

Postgres에서 시간 값과 함께 산술 연산자를 사용할 수 있습니다. 여기를 참조하십시오 : http://www.postgresql.org/docs/8.0/static/functions-datetime.html

또한 시작 시간 및 지속 시간 (또는 생각하는 방법에 따라 시작 및 중지 시간)을 나타내는 "간격"유형의 리터럴 값을 만들 수 있습니다. ,

SELECT * FROM some_table 
WHERE timestamp_column - interval '1 hour' <= 0; 
+0

이 내 두 번째 솔루션입니다 스크립트에서 각각에 대해 계산 :

그래서 당신은 같은 (아직 테스트)를 할 수 있습니다. 데이터베이스가 시간 초과 된 경우 레코드에 자동으로 플래그를 지정할 수있는 방법이 있습니까? – Michael

+0

내가 아는 것은 아닙니다. 트리거를 만들 수는 있지만 일단 트리거를 변경하면 행에서만 실행됩니다. 저장 프로 시저를 만들 수는 있지만 여전히 시작해야합니다. 보기를 만들 수 있지만 최선의 방법 일 수 있습니다. 그러나 성능 측면에서 볼 때 위의 쿼리를 수행하는 것과 실제로 다르지 않습니다. 제한이보기에 숨겨져 있다는 것입니다. (내 취향이 아니 개인적으로 - 나는 애플 리케이션에서 그런 종류의 논리를 유지하고 싶습니다.) –

+0

@ 마이클 당신은 뷰에서 그것을 감쌀 수 있습니다. 예 : CREATE VIEW some_stable_with_expires AS SELECT *, (timeout_column> CURRENT_TIMESTAMP) AS is_expired from some_table; –