On Tue, Jul 14, 2020 at 12:17 PM vignesh C <vignes...@gmail.com> wrote: > > On Tue, Jul 14, 2020 at 11:13 AM David Rowley <dgrowle...@gmail.com> wrote: > > > > On Tue, 14 Jul 2020 at 17:22, David Rowley <dgrowle...@gmail.com> wrote: > > > > > > On Thu, 2 Jul 2020 at 00:46, vignesh C <vignes...@gmail.com> wrote: > > > > b) CopyMultiInsertInfoNextFreeSlot had an unused function parameter > > > > that is not being used, it can be removed. > > > > > > This was raised in [1]. We decided not to remove it. > > > > I just added a comment to the function to mention why we want to keep > > the parameter. I hope that will save any wasted time proposing its > > removal in the future. > > > > FWIW, the function is inlined. Removing it will gain us nothing > > performance-wise anyway. > > > > David > > > > > [1] > > > https://www.postgresql.org/message-id/flat/CAKJS1f-A5aYvPHe10Wy9LjC4RzLsBrya8b2gfuQHFabhwZT_NQ%40mail.gmail.com#3bae9a84be253c527b0e621add0fbaef > > Thanks David for pointing it out, as this has been discussed and > concluded no point in discussing the same thing again. This patch has > a couple of other improvements which can still be taken forward. I > will remove this change and post a new patch to retain the other > issues that were fixed. >
I have removed the changes that david had pointed out and retained the remaining changes. Attaching the patch for the same. Thoughts? Regards, Vignesh EnterpriseDB: http://www.enterprisedb.com
From fbafa5eaaa84028b3bbfb7cde0cbcc3963fd033a Mon Sep 17 00:00:00 2001 From: Vignesh C <vignes...@gmail.com> Date: Tue, 14 Jul 2020 12:21:37 +0530 Subject: [PATCH] Improvements in copy from. There are couple of improvements for copy from in this patch which is detailed below: a) copy from stdin copies lesser amount of data to buffer even though space is available in buffer because minread was passed as 1 to CopyGetData, fixed it by passing the actual space available in buffer, this reduces the frequent call to CopyGetData. b) Copy from reads header line and does nothing for the read line, we need not clear EOL & need not convert to server encoding for the header line. --- src/backend/commands/copy.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 44da71c..bc27dfc 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -796,6 +796,7 @@ CopyLoadRawBuf(CopyState cstate) { int nbytes; int inbytes; + int minread = 1; if (cstate->raw_buf_index < cstate->raw_buf_len) { @@ -807,8 +808,11 @@ CopyLoadRawBuf(CopyState cstate) else nbytes = 0; /* no data need be saved */ + if (cstate->copy_dest == COPY_NEW_FE) + minread = RAW_BUF_SIZE - nbytes; + inbytes = CopyGetData(cstate, cstate->raw_buf + nbytes, - 1, RAW_BUF_SIZE - nbytes); + minread, RAW_BUF_SIZE - nbytes); nbytes += inbytes; cstate->raw_buf[nbytes] = '\0'; cstate->raw_buf_index = 0; @@ -3869,7 +3873,7 @@ CopyReadLine(CopyState cstate) } while (CopyLoadRawBuf(cstate)); } } - else + else if (!(cstate->cur_lineno == 0 && cstate->header_line)) { /* * If we didn't hit EOF, then we must have transferred the EOL marker @@ -3903,8 +3907,9 @@ CopyReadLine(CopyState cstate) } } - /* Done reading the line. Convert it to server encoding. */ - if (cstate->need_transcoding) + /* Done reading the line. Convert it to server encoding if not header. */ + if (cstate->need_transcoding && + !(cstate->cur_lineno == 0 && cstate->header_line)) { char *cvt; -- 1.8.3.1