如何 运行 golang 中的删除查询 returns 已删除实体的 id

How to run a delete query in golang that returns the id of deleted entity

查询:

DELETE FROM *tableName* RETURNING *id*

如何在我的 golang 代码中 运行 这个查询? 我试过了

resp, err := pgConnPool.Exec(context.Background(), deleteQuery)

但它给出 pgConn.CommandTag(可用于获取行数但不是实际行数)

查询正常(只要确保它以 RETURNING *id* 结尾)。

假设您只删除一个实体,您可以按照@mkopriva

的建议使用QueryRow
package yourpackage

import (
  "context"

  "github.com/google/uuid"
  "github.com/jackc/pgx/v4"
)

func YourMethod() {
  // ...

  var recordID uuid.UUID

  err := pgConnPool.QueryRow(context.Background(), deleteQuery).Scan(&recordID)
  if err != nil {
    // handle error.
  }

  // recordID now contains the id of the deleted record.
}

或包裹在处理程序中

package yourpackage

import (
  "context"

  "github.com/google/uuid"
  "github.com/jackc/pgx/v4"
)

func DeleteRecord(/*your args*/) (uuid.UUID, error) {
  var recordID uuid.UUID

  // build your deleteQuery object.

  err := pgConnPool.QueryRow(context.Background(), deleteQuery).Scan(&recordID)

  return recordID, err
}

如果你想添加一次删除多条记录的可能性

package yourpackage

import (
  "context"

  "github.com/google/uuid"
  "github.com/jackc/pgx/v4"
)

func DeleteRecords(/*your args*/) ([]uuid.UUID, error) {
  var recordIDs []uuid.UUID

  // build your deleteQuery object.

  rows, err := pgConnPool.Query(context.Background(), deleteQuery)
  if err != nil {
    return nil, err
  }

  defer rows.Close()

  for rows.Next() {
    var recordID uuid.UUID

    if err := rows.Scan(&recordID); err != nil {
      return nil, err
    }

    recordIDs = append(recordIDs, recordID)
  }

  return recordIDs, rows.Err() // Ensure no reading error occurred  
}