我在Go应用程序中使用jmoiron/sqlx库与PostgreSql server进行通信.在我的应用程序中,我有以下代码:

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相关问答推荐

使用PGx在围棋中执行多条SQL语句

Rust中使用sqlx的多线程postgres操作的惯用方法是什么?

忽略 split_part 的第 n 个分隔符之后

如何将 jackc/pgx 与连接池、上下文、准备好的语句等一起使用

右连接 postgresql 出现语法错误

安装age-installation时出错

JOOQ:数据库版本早于 COCKROACHDB 支持的方言:13.0.0

如何获取在 Go 中完成的 SQL 插入的错误详细信息?

PostgreSql maintenance_work_mem 在索引创建期间增加

联合所有 postgresql Select 子句保留顺序

包含受先前 DELETE 影响的行数的变量?

OpenShift:如何从我的 PC 连接到 postgresql

org.postgresql.util.PSQLException:错误:relation "app_user" does not exist

SQLAlchemy 和多个进程的连接问题

Postgres 默认按 id 排序 - worldship

使用 current_setting() 判断值

将属性添加到 Sequelize FindOne 返回的对象

Python PostgreSQL 模块.哪个最好?

PostgreSQL 条件 where 子句

PostgreSQL/JDBC 和 TIMESTAMP 与 TIMESTAMPTZ