我有以下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将其作为命名语句准备,但将args传递给Exec(..)
,其中:interval
是Golang time.Duration
引起恐慌。
应该如何以这种方式将间隔指定为参数?
除非自2013年以来发生任何变化,否则这是一个WontFix https://github.com/golang/go/issues/4954,建议的解决方案是实施sql.Scanner
和driver.Valuer
但是,对于我的用例,我发现只需将参数设为string
并调用time.Duration.String()
即可。我只用秒工作,只测试了这个范围,所以YMMV。