Обсуждение: BUG #3795: pg_dump is mis-dumping columns containing line breaks
The following bug has been logged online:
Bug reference: 3795
Logged by: Lou Duchez
Email address: lou@paprikash.com
PostgreSQL version: 8.3 beta 3
Operating system: Windows 2003
Description: pg_dump is mis-dumping columns containing line breaks
Details:
Hello,
My copy of PostgreSQL has standard_conforming_strings set to "on", and when
I attempt to pg_dump tables that have strings containing CR/LFs, the data
dumps in a format that psql cannot then reload. The CR/LFs are preceded by
a backslash ("\") in the dump but are not themselves "escaped" -- so instead
of looking like this:
line 1\nline2\nline3
it looks like this:
line 1\
line 2\
line 3
And psql seems to be unable to handle data in that format.
"Lou Duchez" <lou@paprikash.com> writes:
> My copy of PostgreSQL has standard_conforming_strings set to "on", and when
> I attempt to pg_dump tables that have strings containing CR/LFs, the data
> dumps in a format that psql cannot then reload.
It works fine here. Please provide a *complete* example of what you
are doing.
regards, tom lane
> "Lou Duchez" <lou@paprikash.com> writes:
> > My copy of PostgreSQL has standard_conforming_strings set to "on", and when
> > I attempt to pg_dump tables that have strings containing CR/LFs, the data
> > dumps in a format that psql cannot then reload.
>
> It works fine here. Please provide a *complete* example of what you
> are doing.
>
> regards, tom lane
>
Hello,
Here is a complete example. I have two Windows servers, one with PostgreSQL 8.2.5, the
other with 8.3 beta 3. Both have standard_conforming_strings set to "on". My "test"
database is UTF8 on each server. I perform the following steps on each server:
1) Using pgAdmin III version 1.8, I create a table in my "test" database:
CREATE TABLE testtable
(
column1 character varying(200) DEFAULT '',
PRIMARY KEY (column1)
) WITH (OIDS=FALSE);
2) Again using pgAdmin, I add two rows to the table:
insert into testtable (column1) values ('This
is
a
multi
row
string'),
('This
is
another
multi
row
string');
3) Then I run the following pg_dump command:
pg_dump -U postgres -E LATIN1 -t testtable testdatabase
The two versions of PostgreSQL produce slightly different results. 8.2.5 generates the
following "COPY" command:
COPY testtable (column1) FROM stdin;
This\nis\na\nmulti\nrow\nstring
This\nis\nanother\nmulti\nrow\nstring
\.
8.3 beta 3 generates the following "COPY" command:
COPY testtable (column1) FROM stdin;
This\
is\
a\
multi\
row\
string
This\
is\
another\
multi\
row\
string
\.
The 8.3 version, with the unescaped line breaks, confuses the heck out of psql.
lou@paprikash.com writes:
> The two versions of PostgreSQL produce slightly different results.
Yeah, that's an intentional change.
> The 8.3 version, with the unescaped line breaks, confuses the heck out
> of psql.
Works fine for me --- I can load either dump file into either version of
psql.
Maybe your test case involves letting Windows mangle the line endings?
regards, tom lane
I wrote:
> Maybe your test case involves letting Windows mangle the line endings?
On reflection, I'm sure that's exactly what's happening. I now remember
that one of the reasons for the old dump behavior was to make COPY data
a bit safer against line-ending mangling. I've reverted this rather
ill-advised change in behavior, and added a note in the code to
hopefully prevent anyone from making the same mistake again.
regards, tom lane
Em Sunday 02 December 2007 21:24:09 Tom Lane escreveu: > lou@paprikash.com writes: > > The two versions of PostgreSQL produce slightly different results. > > Yeah, that's an intentional change. > > > The 8.3 version, with the unescaped line breaks, confuses the heck out > > of psql. > > Works fine for me --- I can load either dump file into either version of > psql. > > Maybe your test case involves letting Windows mangle the line endings? Another things to pay attention: if the database is UTF-8, why is he specifying LATIN1 on the command line? -- Jorge Godoy <jgodoy@gmail.com>