登录
首页 >  Golang >  Go问答

如何在 PostgreSQL 中将日期类型赋值给变量

来源:stackoverflow

时间:2024-02-28 20:54:25 391浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《如何在 PostgreSQL 中将日期类型赋值给变量》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我将到期日期插入到具有以下架构的 postgres 列中:

exp 日期不为空

我在 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类型

- 时间类型

- 不使用其内存地址传递它(没有 scan() 中的 &)

我仍然无法弄清楚我应该将此数据库值分配给的数据类型。

这是我收到的错误,我认为是来自 pgx: 无法扫描到 dest[1]:无法分配给 *string

我需要使用什么数据类型来分配 postgresql 日期类型的数据库值


解决方案


如果我没记错的话,pgxdate 映射到 time.time。要扫描,您需要一个指向指针的指针,或者使用 pgxpgtype.date 数据类型(我习惯了这些,所以我总是使用它们):

var dt pgtype.Date
err := conn.QueryRow("select exp from items where sub = $1", 1).Scan(&dt)

pgtype.date 具有名为 time 的字段,其类型为 time.time,因此您应该能够正常使用它。请参阅 documentation

以上就是《如何在 PostgreSQL 中将日期类型赋值给变量》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>