unable to encode -25518 into binary format for date (OID 1082)
- Dominant language
- Go
- Stars
- 14.3k
- Forks
- 1.1k
- Avg merge
- 6d 9h
- Merged PRs (30d)
- 11
Description
**Describe the bug**
a bit of context, copy of a table from Adventureworks database , in one of the tables there is a date which is before 1970-1-1 (unix time) , so this delivers a minus number and there it crashes ? to write data to postgres table.
**To Reproduce**
Steps to reproduce the behavior:
If possible, please provide runnable example such as:
```package main
import (
"context"
"fmt"
"log"
"time"
"github.com/apache/arrow/go/v14/arrow"
"github.com/apache/arrow/go/v14/arrow/array"
"github.com/apache/arrow/go/v14/arrow/memory"
"github.com/jackc/pgx/v5"
)
func main() {
conn, err := pgx.Connect(context.Background(), "postgres://:?sslmode=disable")
if err != nil {
log.Fatalf("connect: %v", err)
}
defer conn.Close(context.Background())
// Voorbeeld datum vóór 1970
daysSinceEpoch := int32((time.Date(1960, 1, 1, 0, 0, 0, 0, time.UTC).Unix()) / 86400)
// Arrow array maken met 1 element: 1960-01-01
pool := memory.NewGoAllocator()
b := array.NewDate32Builder(pool)
b.Append(arrow.Date32(daysSinceEpoch))
arr := b.NewArray()
defer arr.Release()
rows := pgx.CopyFromRows([][]interface{}{
{arr.(*array.Date32).Value(0)},
})
_, err = conn.Exec(context.Background(), `DROP TABLE IF EXISTS bug`)
if err != nil {
log.Fatalf("drop table: %v", err)
}
_, err = conn.Exec(context.Background(), `CREATE TABLE bug (before1970 DATE)`)
if err != nil {
log.Fatalf("create table: %v", err)
}
// Invoegen met pgx.CopyFrom
_, err = conn.CopyFrom(context.Background(),
pgx.Identifier{"bug"},
[]string{"before1970"},
rows,
)
if err != nil {
log.Fatalf("copyfrom: %v", err)
}
fmt.Println("✅ Insert succeeded")
}
```
Please run your example with the race detector enabled. For example, `go run -race main.go` or `go test -race`.
**Expected behavior**
the row (field) should be inserted into the target tabel (bug(before1970))
**Actual behavior**
ERROR : unable to encode -25518 into binary format for date (OID 1082)
**Version**
- Go: `$ go version` -> [e.g. go version go1.18.3 darwin/amd64]
- PostgreSQL: PostgreSQL 17.5 on x86_64-pc-linux-musl, compiled by gcc (Alpine 14.2.0) 14.2.0, 64-bit
-
- pgx: `$ grep 'github.com/jackc/pgx/v[0-9]' go.mod` -> [e.g. v4.16.1]
module bug
go 1.24.2
require (
github.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40
github.com/apache/arrow/go/v14 v14.0.2
github.com/jackc/pgx/v5 v5.7.5
)
require (
github.com/goccy/go-json v0.10.2 // indirect
github.com/google/flatbuffers v23.5.26+incompatible // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/zeebo/xxh3 v1.0.2 // indirect
golang.org/x/crypto v0.37.0 // indirect
golang.org/x/mod v0.17.0 // indirect
golang.org/x/sync v0.13.0 // indirect
golang.org/x/sys v0.32.0 // indirect
golang.org/x/text v0.24.0 // indirect
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
)
**Additional context**
Add any other context about the problem here.
Contributor guide
Research direction
Start with the provided Go reproducer, focusing on pgx.CopyFrom and date encoding for PostgreSQL OID 1082. Confirm the failure with the pre-1970 Arrow Date32 value, then verify that inserting it into the bug table succeeds without the binary-format encoding error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, postgresql
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100