2017-12-21 6 views
-1

Ich habe die folgende SQL-AnweisungInterval arg in Postgres Abfrage über Golang SQLX ausgeführt

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

ist der Postgres Intervalltyp. Ich bereite dies als eine benannte Aussage mit sqlx, aber Übergabe Args zu Exec(..) wo ist ein Golang time.Duration verursacht eine Panik.

Wie sollte ein Intervall auf diese Weise als Argument angegeben werden?

+1

Was sagt die Panik? – Flimzy

+0

hast du versucht $ 1, $ 2, ...? –

+1

'Interval' ist ein schlechter Name für eine Variable (oder einen Parameter), da dies der Name für einen Datentyp ist. Und die 'LIMIT 1' macht keinen Sinn innerhalb einer 'EXISTS'-Unterabfrage. – joop

Antwort

0

Sofern nichts seit 2013 verändert hat dies ein WONTFIX isthttps://github.com/golang/go/issues/4954 mit der vorgeschlagenen Lösung sql.Scanner und driver.Valuer

jedoch zu implementieren sein, für meinen Anwendungsfall habe ich, damit ich festgestellt, dass einfach das Argument ein string und rufe time.Duration.String() funktioniert. Ich arbeite nur mit Sekunden und habe nur in diesem Bereich so YMMV getestet.

Verwandte Themen