如何将时间戳插入PostgreSQL数据库

时间:2018-11-21 22:30:00

标签: sql postgresql go timestamp

使用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中,但遇到相同的错误。

2 个答案:

答案 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”,另一个正在发送实际数据。

怪胎。