merge문에 대한 테스트를 하고 있던 중 발견한 것인데,
MERGE INTO google_place_cache
USING (VALUES ('ㅇㅇㅇㅇ','POINT (135.503039 34.669209699999996)')) s
ON google_place_cache.google_place_id = s.column1
WHEN MATCHED THEN
UPDATE SET location = s.column2, updated_at = NOW()
WHEN NOT MATCHED THEN
INSERT (google_place_id, location, updated_at)
VALUES (s.column1, s.column2, NOW());
이러한 쿼리를 여러번 발생시키는 테스트 였다.
근데 계속 fail이 나서 보니, 시간이 모두 같게 뜨는 것이었다.
그래서 처음에는 JPA 캐시 때문인가 했었지만, 놀라운 사실을 알게 되었다.
ㄴㅇㄱ
아마 성능을 위해서, 트랜잭션 시작 시점을 기록하는 거 같은데,,
시간에 매우 민감한 작업이라던지, 매우 긴 트랜잭션을 가진 작업을 쿼리할 때는 반드시 알아야할것 같다.
해결하려면, clock_timestamp()함수로 대체할 수 있다.
우연치 않게 좋은것을 배워간다.