-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 );

:interval是 Postgres 区间类型。我使用 sqlx 将其准备为命名语句,但将 args 传递给Exec(..)where :intervalis a Golangtime.Duration会导致恐慌。

应该如何以这种方式将间隔指定为参数?

4

1 回答 1

1

除非自 2013 年以来发生任何变化,否则这是一个WontFix https://github.com/golang/go/issues/4954,建议的解决方案是实施sql.Scannerdriver.Valuer

但是,对于我的用例,我发现简单地使参数 astring和调用time.Duration.String()有效。我只使用几秒钟,并且只在这个范围内进行了测试,所以 YMMV。

于 2017-12-22T10:11:57.710 回答