While reviewing copy from I identified few improvements for copy from that can be done : 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, Hence it only reads until the data read from libpq is less than minread. This can be fixed by passing the actual space available in buffer, this reduces the unnecessary frequent calls to CopyGetData.
why not applying the same optimization on file read ?
c) Copy from reads header line and do nothing for the header line, we need not clear EOL & need not convert to server encoding for the header line.
We have a patch for column matching feature [1] that may need a header line to be further processed. Even without that I think it is preferable to process the header line for nothing than adding those checks to the loop, performance-wise.