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

May I know how to store the time.time object in Postgresql?

For example, the SQL query:

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

I tried to use loginTime := time.Now(), and it gives a time format that Postgresql don't really understand, e.g. 2017-12-12 00:58:26.9589451 +0800 +08 m=+1406.914186601

But if I try to use loginTime := time.Now().Format(time.RFC3339), and the compiler complain that loginTime is a string, and I need it to be time.time type.

May I know how to handle this?

Sorry for asking newbie question, new to both Golang and Postgres. :)

The pq driver (which I assume you are using) automatically converts time.Time instances correctly for you.

so, you can do:

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

Instead of manually building the query string you should use sql#DB.Exec(...) with placeholder parameters so that the database driver properly escapes the values for you. Doing it this way is a best-practice, especially to avoid security errors such as 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)
}