我使用 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/