用途:在 Go 项目中以 SQL 为契约访问 Postgres,用 sqlc 从 .sql 生成类型安全的 Go 代码,配合 pgx 驱动,避免拼接查询字符串,并替代 ORM 方案。
主要能力:sqlc 负责代码生成,pgx 作为首选 Postgres 驱动,迁移可用 goose、golang-migrate 或 atlas(以仓库实际为准),sqlc.yaml 配置引擎与生成包。支持命名查询(-- name: GetOrder :one)、:one/:many/:exec 语义、事务(Begin + Queries.WithTx)、context.Context 贯穿查询。
使用方式:目录通常为 db/migrations、db/queries、db/sqlc.yaml,生成包放在 internal/db 或 sqlc/。SQL 必须参数化($1),禁止插值 ID 或字符串;在 CI 执行 sqlc generate,不手改生成文件;迁移需版本化,已应用的迁移不再修改。pgx.ErrNoRows 应映射为 ErrNotFound。pgxpool 用于 main,MaxConns 需与生产配置对齐;JSONB 使用显式类型。
适用场景:创建 Postgres/SQL 仓储、替换 ORM、需要类型安全查询与事务的 Go 服务。多租户需在 WHERE 中始终带 tenant_id,软删除需带 deleted_at IS NULL。
限制与注意:不要在同一模块已有 sqlc 时引入 GORM;不要手改 *.sql.go;不要用 fmt.Sprintf 拼接 WHERE;避免巨型 SELECT *;测试可用 Testcontainers Postgres 或 CI 数据库,覆盖无结果与唯一约束冲突(23505)。资料未提供具体版本、安装命令与收费信息。