使用Go将时间戳插入psql数据库时出现问题。
我用以下这一行形成时间戳:
datetime := currentTime.Format("02-01-2006 15:04:05")
我的sql查询是:
SqlStatement := `
INSERT INTO readings (date, temp, humi)
VALUES ($1, $2, $3)`
然后我对psql DB的调用是:
_, err = Db.Exec(SqlStatement, datetime, temp, humi)
(如您所见,我在这里还有其他一些变量,但它们不会引起任何问题。)
执行代码时出现此错误:
pq:日期/时间字段值超出范围:“ 21-11-2018 22:19:59”
据我所知,这表示格式不正确。
但是,当我直接向psql控制台输入完全相同的查询时,它成功地将record(line)添加到表中。
INSERT INTO readings (date, temp, humi) VALUES ('02-01-2006 15:04:05', 20, 30);
旁注:在将列类型从character(20)更改为时间戳之前,此代码可以正常工作,我什至尝试将CAST合并到SQL中,但遇到相同的错误。
答案 0 :(得分:0)
我可以看到datetime
变量是string
类型。我不知道为什么必须在执行查询之前将time.Time
转换为string
。
如果在date
表中定义readings
列为TIMESTAMP
,则可以像这样执行查询
Db.Exec(SqlStatement, currentTime, temp, humi)
答案 1 :(得分:0)
通过添加
解决了SET datestyle TO dmy;
在每个之前
_, err = Db.Exec(SqlStatement, datetime, temp, humi)
所以现在我连续有两个Db.Exec函数,一个正在发送“ SET datestyle TO dmy”,另一个正在发送实际数据。
怪胎。