Интервал arg в запросе postgres, выполненном через Golang SQLX

У меня есть следующий оператор 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 );

:interval тип интервала Postgres Я готовлю это как именованное выражение, используя sqlx, но передавая аргументы Exec(..) где :interval это Голанг time.Duration вызывает панику

Как интервал должен быть указан в качестве аргумента таким образом?

1 ответ

Если с 2013 года ничего не изменилось, это WontFix https://github.com/golang/go/issues/4954 с предложенным решением для реализации sql.Scanner а также driver.Valuer

Тем не менее, для моего случая использования я обнаружил, что просто сделать аргумент string и звонит time.Duration.String() работает. Я работаю только с секундами и проверил только в этом диапазоне, так что YMMV.

Другие вопросы по тегам