Updated Better UUID and Numeric Types (markdown)

Jack Christensen 2020-05-30 14:01:11 -05:00
parent e0895c38e8
commit de7de4f413
2 changed files with 29 additions and 36 deletions

@ -1,36 +0,0 @@
The Go standard library does not have types directly corresponding to PostgreSQL `uuid` and `numeric`. 3rd party libraries are available but pgx does not use them by default to avoid external dependencies.
However, pgx supports both the ability to register new data types and to override the default handling of currently supported types. There are packages available to use `github.com/gofrs/uuid` and `github.com/shopspring/decimal`.
Import the following packages:
```go
import (
pgtypeuuid "github.com/jackc/pgtype/ext/gofrs-uuid"
shopspring "github.com/jackc/pgtype/ext/shopspring-numeric"
)
```
Then register the data types for your connection. If you are using a connection pool this should be done in the `AfterConnect` hook.
```go
dbconfig, err := pgxpool.ParseConfig(databaseURL)
if err != nil {
// handle error
}
dbconfig.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error {
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: &pgtypeuuid.UUID{},
Name: "uuid",
OID: pgtype.UUIDOID,
})
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: &shopspring.Numeric{},
Name: "numeric",
OID: pgtype.NumericOID,
})
return nil
}
```

29
UUID-Handling.md Normal file

@ -0,0 +1,29 @@
The Go standard library does not have a type directly corresponding to PostgreSQL `uuid`. 3rd party libraries are available but pgx does not use them by default to avoid external dependencies.
However, pgx supports both the ability to register new data types and to override the default handling of currently supported types. There is a packages available to use `github.com/gofrs/uuid`.
Import the following package:
```go
import (
pgtypeuuid "github.com/jackc/pgtype/ext/gofrs-uuid"
)
```
Then register the data type for your connection. If you are using a connection pool this should be done in the `AfterConnect` hook.
```go
dbconfig, err := pgxpool.ParseConfig(databaseURL)
if err != nil {
// handle error
}
dbconfig.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error {
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: &pgtypeuuid.UUID{},
Name: "uuid",
OID: pgtype.UUIDOID,
})
return nil
}
```