Thread: BUG #6083: psql script line numbers incorrectly count \copy data

BUG #6083: psql script line numbers incorrectly count \copy data

From
"Steve Haslam"
Date:
The following bug has been logged online:

Bug reference:      6083
Logged by:          Steve Haslam
Email address:      araqnid@googlemail.com
PostgreSQL version: 9.0.4
Operating system:   Debian GNU/Linux (amd64)
Description:        psql script line numbers incorrectly count \copy data
Details:

test_linenumbers.dat:
1
1
2
3
5
8

test_linenumbers.sql:
DO $$ BEGIN  RAISE INFO 'Before copy';  END; $$; -- line 1
CREATE TEMP TABLE test_linenumbers_data(value int);
\copy test_linenumbers_data from test_linenumbers.dat
DO $$ BEGIN  RAISE INFO 'After copy';  END; $$; -- line 4


Performing "psql -f test_linenumbers.sql" produces:


psql:test_linenumbers.sql:1: INFO:  Before copy
DO
CREATE TABLE
psql:test_linenumbers.sql:11: INFO:  After copy
DO


However, it seems to me that the second INFO should be reported against
test_linenumbers.sql:4 rather than :11. Apparently, the data read from \copy
is incrementing the script line number counter?

Also occurs with 9.1b2 and a recent 9.2devel.

Re: BUG #6083: psql script line numbers incorrectly count \copy data

From
Tom Lane
Date:
"Steve Haslam" <araqnid@googlemail.com> writes:
> ... Apparently, the data read from \copy
> is incrementing the script line number counter?

Yeah, so it is.  That is correct behavior for COPY FROM STDIN,
but not so much for copying from a separate file.

The attached patch seems like an appropriate fix.  However, I'm unsure
whether to apply it to released branches ... does anyone think this
might break somebody's application?

            regards, tom lane

diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c
index 5e69d29b6cbeab56aa0c85e85c3edce46d06efac..ebe5ee9ea551b858a4ad6119322405109d3212d8 100644
*** a/src/bin/psql/copy.c
--- b/src/bin/psql/copy.c
*************** handleCopyIn(PGconn *conn, FILE *copystr
*** 586,592 ****
                  }
              }

!             pset.lineno++;
          }
      }

--- 586,593 ----
                  }
              }

!             if (copystream == pset.cur_cmd_source)
!                 pset.lineno++;
          }
      }


On Mon, Jul 04, 2011 at 12:02:12PM -0400, Tom Lane wrote:
> "Steve Haslam" <araqnid@googlemail.com> writes:
> > ... Apparently, the data read from \copy is incrementing the
> > script line number counter?
> 
> Yeah, so it is.  That is correct behavior for COPY FROM STDIN, but
> not so much for copying from a separate file.
> 
> The attached patch seems like an appropriate fix.  However, I'm
> unsure whether to apply it to released branches ... does anyone
> think this might break somebody's application?

No.

Cheers,
David.
-- 
David Fetter <david@fetter.org> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david.fetter@gmail.com
iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate


Re: BUG #6083: psql script line numbers incorrectly count \copy data

From
Robert Haas
Date:
On Mon, Jul 4, 2011 at 12:02 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> "Steve Haslam" <araqnid@googlemail.com> writes:
>> ... Apparently, the data read from \copy
>> is incrementing the script line number counter?
>
> Yeah, so it is.  That is correct behavior for COPY FROM STDIN,
> but not so much for copying from a separate file.
>
> The attached patch seems like an appropriate fix.  However, I'm unsure
> whether to apply it to released branches ... does anyone think this
> might break somebody's application?

I think this is pretty safe.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company