У меня есть таблица Postgres с именем certs
с 4 столбцами.
enter code here
\d certs
Table "public.certs"
Column | Type | Collation | Nullable | Default
-------------+-----------------------------+-----------+----------+---------
uuid | character varying(255) | | not null |
serialnumber | bigint | | |
validtill | timestamp without time zone | | |
validfrom | timestamp without time zone | | |
Indexes:
"certs_pkey" PRIMARY KEY, btree (uuid)
Как вы можете видеть, последние 2 столбца имеют тип timestamp
.Теперь я пытаюсь прочитать все строки в столбцах следующим образом
res, err := sql.DB.Query("SELECT * from certs;")
if err == nil{
log.Fatal(err)
}
fmt.Println(res.Columns())
defer res.Close()
var id string
var serialNumber int64
var validFrom time.Time
var validTill time.Time
fmt.Println(res.ColumnTypes())
for res.Next() {
err := res.Scan(&id, &serialNumber, &validFrom, &validTill)
fmt.Println(res.Columns())
if err != nil {
log.Errorf("error %v", err)
} else {
cs.Certs[id] = serialNumber
}
В основном я пытаюсь декодировать полученные значения.
Я получаю следующую ошибку
error sql: expected 2 destination arguments in Scan, not 4
Кроме того, печать res.columns()
печатает это
[uuid serialnumber] <nil>
Как вы можете видеть, есть ошибка, и напечатанные columns
не показывают validtill
и validfrom
.Независимая проверка базы данных с использованием psql
действительно проверяет наличие столбцов validtill
и validfrom
с данными в них.
Что мне здесь не хватает?Почему ошибка?