Wie speichern Golang Zeit.Zeit in Postgresql timestamp?
Darf ich wissen, wie bewahren Sie die time.time
Objekt in Postgresql?
Beispielsweise die SQL-Abfrage:
INSERT INTO "UserAccount" ("email", "login_time") VALUES ('[email protected]', 2017-12-12 00:58:26.9589451 +0800 +08 m=+1406.914186601)
Habe ich versucht zu verwenden loginTime := time.Now()
, und es gibt eine Zeit-format, dass Postgresql nicht wirklich verstehen, z.B. 2017-12-12 00:58:26.9589451 +0800 +08 m=+1406.914186601
Aber wenn ich versuche, mit loginTime := time.Now().Format(time.RFC3339)
, und der compiler sich beschweren, dass loginTime
ist ein string
, und ich brauche es time.time
geben.
Darf ich wissen, wie Sie damit umgehen?
Sorry für die Fragen, newbie-Frage, neue sowohl Golang und Postgres. 🙂
- Zusätzlich zu dem, was die Antworten, empfehlen, Sie können auch konvertieren einen gültigen Zeitstempel-Zeichenfolge in eine
timestamp
odertimestamptz
in der postgres-Abfrage wie so'2006-01-02T15:04:05Z07:00'::timestamp
/'2006-01-02T15:04:05Z07:00'::timestamptz
, funktioniert auch mit Platzhaltern$2::timestamp
... Nur sicherstellen, dass die timestamp-string hat ein format akzeptiert, die von postgres, die man in deinem Beispiel nicht. - dies könnte helfen, postgresql.org/docs/9.1/static/datatype-datetime.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstelle der manuellen Erstellung der Abfrage-string, die Sie verwenden sollten
sql#DB.Exec(...)
mit Platzhalter-Parameter, so dass die Datenbank-Treiber korrekt entweicht die Werte für Sie. Auf diese Weise ist eine best-practice, insbesondere zur Vermeidung Sicherheit Fehler wie SQL-injection.?
Platzhalter. Müssen Sie$1
und$2
oder verwenden Sie so etwas wie sqlx'sRebind()
Funktion.Pq-Treiber (die ich nehme an, Sie sind mit) konvertiert automatisch Zeit.Zeit Instanzen richtig für Sie.
so, können Sie tun: