如何在Postgresql时间戳中存储Golang time.time?

时间:2017-12-11 17:38:24

标签: postgresql go

我可以知道如何在Postgresql中存储time.time对象吗?

例如,SQL查询:

INSERT INTO "UserAccount" ("email", "login_time") VALUES ('human@example.com', 2017-12-12 00:58:26.9589451 +0800 +08 m=+1406.914186601)

我尝试使用loginTime := time.Now(),它提供了Postgresql不太了解的时间格式,例如 2017-12-12 00:58:26.9589451 +0800 +08 m = + 1406.914186601

但是如果我尝试使用loginTime := time.Now().Format(time.RFC3339),并且编译器抱怨loginTimestring,我需要它time.time类型。

我可以知道如何处理这个问题吗?

很抱歉提出新手问题,Golang和Postgres都是新手。 :)

2 个答案:

答案 0 :(得分:6)

您应该使用带有占位符参数的sql#DB.Exec(...),而不是手动构建查询字符串,以便数据库驱动程序正确地为您转义值。这样做是最好的做法,特别是为了避免SQL injection等安全错误。

email, loginTime := "human@example.com", time.Now()
result, err := db.Exec("INSERT INTO UserAccount VALUES ($1, $2)", email, loginTime)
if err != nil {
  panic(err)
}

答案 1 :(得分:2)

pq驱动程序(我假设您正在使用)会自动为您正确转换time.Time实例。

所以,你可以这样做:

db.Exec(`INSERT INTO "UserAccount" ("email", "login_time") VALUES ($1, $2)`,"human@example.com",time.Now())