From 41fa6e844c7173d2e7083a644e3f67c9634a6fa7 Mon Sep 17 00:00:00 2001 From: Patrick Hemmer Date: Sun, 7 Mar 2021 22:51:32 -0500 Subject: [PATCH] Add logging on CopyFrom Logging previously only logged statement results on Exec() and Query(), but not CopyFrom(). This makes change makes it consistent. --- copy_from.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/copy_from.go b/copy_from.go index 1e4d1373..4bbbe30e 100644 --- a/copy_from.go +++ b/copy_from.go @@ -5,6 +5,7 @@ import ( "context" "fmt" "io" + "time" "github.com/jackc/pgconn" "github.com/jackc/pgio" @@ -145,12 +146,24 @@ func (ct *copyFrom) run(ctx context.Context) (int64, error) { w.Close() }() + startTime := time.Now() + commandTag, err := ct.conn.pgConn.CopyFrom(ctx, r, fmt.Sprintf("copy %s ( %s ) from stdin binary;", quotedTableName, quotedColumnNames)) r.Close() <-doneChan - return commandTag.RowsAffected(), err + rowsAffected := commandTag.RowsAffected() + if err == nil { + if ct.conn.shouldLog(LogLevelInfo) { + endTime := time.Now() + ct.conn.log(ctx, LogLevelInfo, "Copy", map[string]interface{}{"tableName": ct.tableName, "columnNames": ct.columnNames, "time": endTime.Sub(startTime), "rowCount": rowsAffected}) + } + } else if ct.conn.shouldLog(LogLevelError) { + ct.conn.log(ctx, LogLevelError, "Copy", map[string]interface{}{"err": err, "tableName": ct.tableName, "columnNames": ct.columnNames}) + } + + return rowsAffected, err } func (ct *copyFrom) buildCopyBuf(buf []byte, sd *pgconn.StatementDescription) (bool, []byte, error) {