Re: [BUGS] Nasty tsvector can make dumps unrestorable

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Stuart Bishop <stuart(at)stuartbishop(dot)net>, Oleg Bartunov <oleg(at)sai(dot)msu(dot)su>, Teodor Sigaev <teodor(at)sigaev(dot)ru>, PostgreSQL-development <pgsql-hackers(at)postgreSQL(dot)org>
Subject: Re: [BUGS] Nasty tsvector can make dumps unrestorable
Date: 2007-11-10 03:19:44
Message-ID: 200711100319.lAA3Ji219846@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

Tom Lane wrote:
> Stuart Bishop <stuart(at)stuartbishop(dot)net> writes:
> > The attached script creates a tsvector with a value that can be dumped using
> > pg_dump, but not loaded again using pg_restore. This causes restores of a
> > dump containing this value to fail.
>
> Hmm, sorta looks like tsvectorout should be doubling backslashes?

I think the larger question is why tsvectorin() requires
double-backslashes? It seems it is for marking of single-quotes in
phrases, from what I can tell from the code and regression test usage:

SELECT E'''1 \\''2'' 3'::tsvector;
tsvector
-------------
'3' '1 ''2'
(1 row)

My guess is that the '' is used to start/stop phrases, and \\'' puts a
literal '' in the phrase.

I have developed the attached patch which doubles backslashes on output:

test=> INSERT INTO Foo(bar) VALUES (E'\\\\x');
INSERT 0 1
test=> select * from foo;
bar
-------
'\\x'
(1 row)

However, I am still unclear if the dump code is correct because I don't
see the backslash preserved in \\'' cases, just \\\\ cases:

test=> CREATE TABLE Foo(bar tsvector);
CREATE
test=> INSERT INTO Foo(bar) VALUES (E'\\''x');
INSERT 0 1
test=> select * from foo;
bar
-------
'''x'
(1 row)

and pg_dump outputs:

COPY foo (bar) FROM stdin;
'''x'
\.

While the COPY will load into the table, this doesn't:

test=> INSERT INTO Foo(bar) VALUES (E'''''x');
ERROR: syntax error in tsvector: "''x"

I am confused.

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://postgres.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

Attachment Content-Type Size
/pgpatches/ts_backslash text/x-diff 567 bytes

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Andrew Dunstan 2007-11-10 03:53:18 Re: [BUGS] Nasty tsvector can make dumps unrestorable
Previous Message Ben Leslie 2007-11-10 02:43:23 Re: BUG #3735: Can't create xml-stylesheet processing instruction

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2007-11-10 03:53:18 Re: [BUGS] Nasty tsvector can make dumps unrestorable
Previous Message Tom Lane 2007-11-10 01:53:03 Re: Need for advice and direction (again)