希曼日记

SQL错误处理

https://github.com/jackc/pgx/wiki/Error-Handling

// Be sure the correct package is imported, this will not work if the old, standalone pgconn repo is imported instead.
import "github.com/jackc/pgx/v5/pgconn"

// ...

err = conn.QueryRow(context.Background(), "select 1 +").Scan(&greeting)
if err != nil {
  var pgErr *pgconn.PgError
  if errors.As(err, &pgErr) {
    fmt.Println(pgErr.Message) // => syntax error at end of input
    fmt.Println(pgErr.Code) // => 42601
  }
}

示例:

account, err := s.store.CreateAccount(ctx, arg)
	if err != nil {
		var pgErr *pgconn.PgError
		if errors.As(err, &pgErr) {
			fmt.Printf("postgres sql err message is '%s' \n", pgErr.Message)
			fmt.Printf("postgres sql err code is '%s' \n", pgErr.Code)

			switch pgErr.Code {
			case "23503":
				ctx.JSON(http.StatusForbidden, gin.H{
					"error": pgErr.Error(),
				})
				return
			case "23505":
				ctx.JSON(http.StatusForbidden, gin.H{
					"error": pgErr.Error(),
				})
				return
			}
		}
		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
		return
	}