Как вставить метку времени в базу данных postgreSQL - PullRequest
0 голосов
/ 22 ноября 2018

У меня проблема с вставкой метки времени в мою базу данных psql с помощью Go.

Я формирую метку времени с помощью этой строки:

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"

Какиекак я понимаю, это означает, что формат не является правильным.

YET, когда я ввожу точно такой же запрос непосредственно в консоль psql, он успешно добавляет запись (строку) в таблицу.

INSERT INTO readings (date, temp, humi)  VALUES ('02-01-2006 15:04:05', 20, 30);

Примечание: Этот код работал нормально, прежде чем я изменил тип столбца с символа (20) на метку времени, я даже попытался включить CAST в SQL, но я получил ту же ошибку.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Решил, добавив

SET datestyle TO dmy;

Перед каждым

_, err = Db.Exec(SqlStatement, datetime, temp, humi)

Итак, теперь у меня есть две функции Db.Exec подряд, одна отправляет «SET datestyle TO dmy» идругой - тот, который отправляет фактические данные.

Wierd.

0 голосов
/ 22 ноября 2018

Я вижу, что переменная datetime имеет тип string.Я не знаю, почему вы должны конвертировать time.Time в string перед запросом exec.
Если определить date столбец в таблице readings равен TIMESTAMP, вы можете выполнить запрос как этот
Db.Exec(SqlStatement, currentTime, temp, humi)

...