Я вставляю даты истечения срока действия в Postgres в столбце с такой схемой:
exp DATE NOT NULL
То, как я создаю эти даты в Golang, зависит от "времени" "библиотека, которая использует тип данных Time
(Не уверен, что ее базовый тип является строкой, документы go действительно не указали см. здесь ).
Вот как я делаю вставку с pgx библиотекой
expirationDate := time.Unix(expiresAt, 0)
sql := `
insert into items
(sub, uuid, exp)
VALUES ($1, $2, $3)
`
_, err := connection.Exec(
context.Background(),
sql,
subject,
id,
expirationDate,
)
Где-то еще в моем коде expiresAt
сделано так:
days := 1 * 24 * time.Hour
expirationTime := time.Now().Add(days)
expirationTime.Unix() // this is what's being passed in my function (expiresAt int64) that does the DB insertion
Проблема пытается чтобы вернуть эту дату обратно из Postgres.
Когда я смотрю на нее в pgAdmin, я вижу, что она хранится как yyyy-mm-dd, поэтому я предположил, что могу назначить ее для строковой переменной, поэтому я попробовал это:
type RevokedRefreshToken struct {
OldUUID string
OldExpirationDate string
}
var revokedRefreshToken RevokedRefreshToken
err := connection.QueryRow(context.Background(), "select uuid, exp from items where sub = $1", subject).
Scan(&revokedRefreshToken.OldUUID, &revokedRefreshToken.OldExpirationDate)
Я также пытался:
- тип int64
- тип времени
- не передавать его, используя адрес своей памяти (без функции & in Scan ())
Я до сих пор не могу понять тип данных, которому я должен присвоить это значение БД.
Вот ошибка, которую я получаю, я думаю, из pgx: can't scan into dest[1]: unable to assign to *string
* 10 30 *
Какой тип данных мне нужно использовать, чтобы присвоить этому значению БД PostgreSQL тип даты