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