You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL删除操作恒返回成功时,如何编写语法让sqlc生成返回受影响行数的方法?

让sqlc生成的PostgreSQL DELETE方法返回受影响行数的方案

要让sqlc生成的DELETE操作方法返回(int, error)而非仅error,关键是构造能让sqlc识别到返回数值的SQL语句——也就是让DELETE操作返回受影响的行数。以下是具体实现方式:

核心思路

sqlc根据SQL语句的返回结果生成对应Go方法的返回值:

  • 标记为:exec的DELETE语句,sqlc默认生成仅返回error的方法
  • 标记为:one的查询语句(返回单个整数值),sqlc会生成返回(int64, error)的方法

具体SQL写法

将普通DELETE语句改写为带统计逻辑的查询,通过WITH子句捕获删除的行并统计数量:

-- name: DeleteUser :one
WITH deleted_rows AS (
    DELETE FROM users
    WHERE id = $1
    RETURNING 1
)
SELECT count(*) FROM deleted_rows;
  • :one标签指定该语句返回单个结果(即受影响的行数)
  • RETURNING 1用于标记被删除的每一行,后续通过count(*)统计总行数

生成的Go方法示例

sqlc会根据上述SQL生成类似如下的方法:

func (q *Queries) DeleteUser(ctx context.Context, id int) (int64, error) {
    // 自动生成的执行逻辑
}

如果需要返回int而非int64,可以在sqlc.yaml配置文件中为返回列指定Go类型,或者在业务代码中自行转换。

内容的提问来源于stack exchange,提问作者许家宝

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:57:48