web-dev-qa-db-ja.com

Golang time.timeをPostgresqlタイムスタンプに保存する方法は?

_time.time_オブジェクトをPostgresqlに保存する方法を教えてください。

たとえば、SQLクエリ:

INSERT INTO "UserAccount" ("email", "login_time") VALUES ('[email protected]', 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の両方にとって新しい、初心者向けの質問をして申し訳ありません。:)

5
Boo Yan Jiong

クエリ文字列を手動で作成する代わりに、データベースドライバーが値を適切にエスケープするように、プレースホルダーパラメーターと共に sql#DB.Exec(...) を使用する必要があります。このようにすることは、特に SQLインジェクション などのセキュリティエラーを回避するためのベストプラクティスです。

email, loginTime := "[email protected]", time.Now()
result, err := db.Exec("INSERT INTO UserAccount VALUES ($1, $2)", email, loginTime)
if err != nil {
  panic(err)
}
10
maerics

Pqドライバー(私はあなたが使用していると思います)は、time.Timeインスタンスを自動的に正しく変換します。

だから、あなたは行うことができます:

db.Exec(`INSERT INTO "UserAccount" ("email", "login_time") VALUES ($1, $2)`,"[email protected]",time.Now())
3
David Budworth