This is an automated email from the ASF dual-hosted git repository. woblerr pushed a commit to branch upgrade-go-1.25 in repository https://gitbox.apache.org/repos/asf/cloudberry-backup.git
commit 365aedf5a36a7482401c7b4441c226d3bd047acd Author: woblerr <[email protected]> AuthorDate: Fri Jun 26 00:08:18 2026 +0300 Fix pgx v5 PgError handling. After moving to pgx v5, database errors are returned as pgx/v5/pgconn.PgError. The old jackc/pgconn type assertions no longer matched, so backup lock handling could treat unexpected errors as lock-not-available, and restore COPY errors could lose their CONTEXT. Use errors.As with pgx/v5 pgconn in backup and restore code, update the restore test, and remove the old pgconn dependency. --- backup/data.go | 12 +++++++++--- go.mod | 6 +----- go.sum | 11 ----------- restore/data.go | 5 +++-- restore/data_test.go | 2 +- 5 files changed, 14 insertions(+), 22 deletions(-) diff --git a/backup/data.go b/backup/data.go index 9d937bae..e4571408 100644 --- a/backup/data.go +++ b/backup/data.go @@ -16,7 +16,7 @@ import ( "github.com/apache/cloudberry-backup/utils" "github.com/apache/cloudberry-go-libs/dbconn" "github.com/apache/cloudberry-go-libs/gplog" - "github.com/jackc/pgconn" + "github.com/jackc/pgx/v5/pgconn" "gopkg.in/cheggaaa/pb.v1" ) @@ -214,13 +214,19 @@ func BackupDataForAllTables(tables []Table) []map[uint32]int64 { // tables before the metadata dumping part. err := LockTableNoWait(table, whichConn) if err != nil { - if pgErr, ok := err.(*pgconn.PgError); ok && pgErr.Code != PG_LOCK_NOT_AVAILABLE { + lockErr := err + var pgErr *pgconn.PgError + if !errors.As(lockErr, &pgErr) || pgErr.Code != PG_LOCK_NOT_AVAILABLE { isErroredBackup.Store(true) err = connectionPool.Rollback(whichConn) if err != nil { gplog.Warn("Worker %d: %s", whichConn, err) } - gplog.Fatal(fmt.Errorf("Unexpectedly unable to take lock on table %s, %s", table.FQN(), pgErr.Error()), "") + errMsg := lockErr.Error() + if pgErr != nil { + errMsg = pgErr.Error() + } + gplog.Fatal(fmt.Errorf("Unexpectedly unable to take lock on table %s, %s", table.FQN(), errMsg), "") } if gplog.GetVerbosity() < gplog.LOGVERBOSE { // Add a newline to interrupt the progress bar so that diff --git a/go.mod b/go.mod index 82aa29b8..37ab24fc 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/blang/semver/v4 v4.0.0 github.com/blang/vfs v1.0.0 github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf - github.com/jackc/pgconn v1.14.3 + github.com/jackc/pgx/v5 v5.9.2 github.com/jmoiron/sqlx v1.3.5 github.com/klauspost/compress v1.18.0 github.com/lib/pq v1.10.7 @@ -47,12 +47,8 @@ require ( github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect github.com/google/uuid v1.6.0 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect - github.com/jackc/chunkreader/v2 v2.0.1 // indirect - github.com/jackc/pgio v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgproto3/v2 v2.3.3 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect diff --git a/go.sum b/go.sum index 52082276..1de9bbcf 100644 --- a/go.sum +++ b/go.sum @@ -51,19 +51,8 @@ github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7P github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf h1:FtEj8sfIcaaBfAKrE1Cwb61YDtYq9JxChK1c7AKce7s= github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf/go.mod h1:yrqSXGoD/4EKfF26AOGzscPOgTTJcyAwM2rpixWT+t4= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v1.14.3 h1:bVoTr12EGANZz66nZPkMInAV/KHD2TxH9npjXXgiB3w= -github.com/jackc/pgconn v1.14.3/go.mod h1:RZbme4uasqzybK2RK5c65VsHxoyaml09lx3tXOcO/VM= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5Wi/+Zz7xoE5ALHsRQlOctkOiHc= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3/v2 v2.3.3 h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag= -github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= diff --git a/restore/data.go b/restore/data.go index 44d21120..13ec4218 100644 --- a/restore/data.go +++ b/restore/data.go @@ -16,7 +16,7 @@ import ( "github.com/apache/cloudberry-go-libs/cluster" "github.com/apache/cloudberry-go-libs/dbconn" "github.com/apache/cloudberry-go-libs/gplog" - "github.com/jackc/pgconn" + "github.com/jackc/pgx/v5/pgconn" "github.com/pkg/errors" "gopkg.in/cheggaaa/pb.v1" ) @@ -60,7 +60,8 @@ func CopyTableIn(connectionPool *dbconn.DBConn, tableName string, tableAttribute errStr := fmt.Sprintf("Error loading data into table %s", tableName) // The COPY ON SEGMENT error might contain useful CONTEXT output - if pgErr, ok := err.(*pgconn.PgError); ok && pgErr.Where != "" { + var pgErr *pgconn.PgError + if errors.As(err, &pgErr) && pgErr.Where != "" { errStr = fmt.Sprintf("%s: %s", errStr, pgErr.Where) } diff --git a/restore/data_test.go b/restore/data_test.go index 01a03b05..2e1c9da4 100644 --- a/restore/data_test.go +++ b/restore/data_test.go @@ -10,7 +10,7 @@ import ( "github.com/apache/cloudberry-backup/restore" "github.com/apache/cloudberry-backup/utils" "github.com/apache/cloudberry-go-libs/cluster" - "github.com/jackc/pgconn" + "github.com/jackc/pgx/v5/pgconn" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
