gpt4 book ai didi

postgresql - Go:如何使用 NamedExec() 在 Postgresql 上获取最后一个插入 ID

转载 作者:IT老高 更新时间:2023-10-28 13:03:52 28 4
gpt4 key购买 nike

我使用 jmoiron/sqlx用于在我的 Go 应用程序中与我的 PostgreSql 服务器通信的库。在我的应用程序的某个地方,我有以下代码:

sqlQuery := `
INSERT INTO table_to_insert (
code,
status,
create_time,
create_by
) VALUES (
'',
0,
CURRENT_TIMESTAMP,
0
) RETURNING id
`

datas, err := tx.NamedExec(sqlQuery, structToInsert)

问题:如何使用 tx.NamedExec() 的返回值获取最后一个插入 ID?我试过 datas.LastInsertId() 但它总是返回 0。

注意:我确定插入到 postgres 是成功的。

最佳答案

这是因为 PostgreSQL 没有返回最后插入的 id。这是因为最后插入的 id 只有在使用序列的表中创建新行时才可用。

如果您实际上在分配了序列的表中插入一行,则必须使用 RETURNING clause .像这样:INSERT INTO table (name) VALUES("val") RETURNING id"

我不确定您的驱动程序,但在 pq您将通过以下方式执行此操作:

lastInsertId := 0
err = db.QueryRow("INSERT INTO brands (name) VALUES($1) RETURNING id", name).Scan(&lastInsertId)

关于postgresql - Go:如何使用 NamedExec() 在 Postgresql 上获取最后一个插入 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33382981/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com