diff --git a/Error-Handling.md b/Error-Handling.md new file mode 100644 index 0000000..47389b9 --- /dev/null +++ b/Error-Handling.md @@ -0,0 +1,16 @@ +# Error Handling + +pgx uses Go 1.13+ style error wrapping. That means that `errors.Is()` and `errors.As()` should be used instead of directly testing an error for equality or attempting a type assertion. + +If an error is returned from PostgreSQL then underlying error type will be a [*pgconn.PgError](https://pkg.go.dev/github.com/jackc/pgconn?tab=doc#PgError). + +```go +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 + } +} +```