2017-12-21 6 views
-1

나는 다음과 같은 SQL 문간격 인수

INSERT INTO scheduled_event_log ("key") 
SELECT :key WHERE NOT EXISTS(SELECT AGE(now() at time zone 'utc', timestamp_utc) 
FROM scheduled_event_log 
WHERE "key" = :key 
    AND age(now() at time zone 'utc', timestamp_utc) < :interval limit 1); 

Postgres의 간격 유형이에게 있습니다. 이것을 sqlx를 사용하여 명명 된 명령문으로 준비하지만 args를 Exec(..)으로 전달하면 이 Golang time.Duration 인 경우 패닉이 발생합니다.

이런 식으로 간격을 어떻게 인수로 지정해야합니까? 아무것도 2013 년 이후 변경되지 않는 한

+1

공황은 무엇을 말합니까? – Flimzy

+0

$ 1, $ 2, ... 시도한 적이 있습니까? –

+1

'Interval'은 변수 (또는 매개 변수)에 나쁜 이름입니다. 이는 데이터 유형의 이름이기 때문입니다. 그리고'LIMIT 1'은'EXISTS' 부질의 내부에서 의미가 없습니다. – joop

답변

0

이 제안 된 솔루션은 그러나 sql.Scanner

driver.Valuer을 구현되고있는 고치지 않을 것 (wontfix)https://github.com/golang/go/issues/4954입니다, 내 사용 사례에 대해 내가 발견 단순히 인수 string을하고 time.Duration.String()를 호출 공장. 저는 초 단위로만 작업하고 있으며 YMMV만큼이 범위에서 테스트했습니다.