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

标签 postgresql go sqlx

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

相关文章:

sql - POSTGRES - 使用 ON CONFLICT DO NOTHING 防止串行递增

function - 为什么postgres不接受函数参数作为表名

postgresql - libpq,带参数插入

parsing - 我如何在 Golang 中解析这个日期?

database - SQLX "missing destination name"在结构标记中使用表名时

sql - 没有重复的 PostgreSQL 组合

c++ - Go:使用 C++ 库:包含 <string> 的错误

go - 不同类型集的集合操作的实现策略

sql - 如何创建一个插入但随后返回插入数据的事务

postgresql - 转换 Exec 参数 $2 类型 : invalid character ‘b’ looking for beginning of value