diff --git a/src/backend/utils/adt/tsquery.c b/src/backend/utils/adt/tsquery.c
index e591b9622f9f5cd78362af8531d3fb3003ec8c8d..509998c51021de9dd21f26c0ecf31e106ab6ec41 100644
--- a/src/backend/utils/adt/tsquery.c
+++ b/src/backend/utils/adt/tsquery.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/tsquery.c,v 1.10 2007/11/15 22:25:16 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/tsquery.c,v 1.11 2007/11/16 15:05:59 teodor Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -614,6 +614,11 @@ infix(INFIX *in, bool first)
 				*(in->cur) = '\'';
 				in->cur++;
 			}
+			else if (t_iseq(op, '\\'))
+			{
+				*(in->cur) = '\\';
+				in->cur++;
+			}
 			COPYCHAR(in->cur, op);
 
 			clen = pg_mblen(op);
diff --git a/src/backend/utils/adt/tsvector.c b/src/backend/utils/adt/tsvector.c
index a82c6bb44d71eb049bfa90bf33b0297a891bdc7a..fb44c1224f87ddc826ee99b6ce6af9489d039921 100644
--- a/src/backend/utils/adt/tsvector.c
+++ b/src/backend/utils/adt/tsvector.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/tsvector.c,v 1.8 2007/11/15 22:25:16 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/tsvector.c,v 1.9 2007/11/16 15:05:59 teodor Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -345,6 +345,8 @@ tsvectorout(PG_FUNCTION_ARGS)
 
 			if (t_iseq(curin, '\''))
 				*curout++ = '\'';
+			else if (t_iseq(curin, '\\'))
+				*curout++ = '\\';
 
 			while (len--)
 				*curout++ = *curin++;
diff --git a/src/test/regress/expected/tstypes.out b/src/test/regress/expected/tstypes.out
index e81c601b66f24eb3f50a02243d6fbcaddec2c023..4672f099e0ac8613e8abe14709a71283d70b51cf 100644
--- a/src/test/regress/expected/tstypes.out
+++ b/src/test/regress/expected/tstypes.out
@@ -59,6 +59,18 @@ SELECT E'''1 \\''2'' '' 3'' 4 '::tsvector;
  '4' ' 3' '1 ''2'
 (1 row)
 
+SELECT $$'\\as' ab\c ab\\c AB\\\c ab\\\\c$$::tsvector;
+                tsvector                
+----------------------------------------
+ '\\as' 'abc' 'AB\\c' 'ab\\c' 'ab\\\\c'
+(1 row)
+
+SELECT tsvectorin(tsvectorout($$'\\as' ab\c ab\\c AB\\\c ab\\\\c$$::tsvector));
+               tsvectorin               
+----------------------------------------
+ '\\as' 'abc' 'AB\\c' 'ab\\c' 'ab\\\\c'
+(1 row)
+
 SELECT '''w'':4A,3B,2C,1D,5 a:8';
        ?column?        
 -----------------------
@@ -318,6 +330,12 @@ SELECT E'1&(''2''&('' 4''&(\\|5 | ''6 \\'' !|&'')))'::tsquery;
  '1' & '2' & ' 4' & ( '|5' | '6 '' !|&' )
 (1 row)
 
+SELECT $$'\\as'$$::tsquery;
+ tsquery 
+---------
+ '\\as'
+(1 row)
+
 SELECT 'a' < 'b & c'::tsquery as "true";
  true 
 ------
diff --git a/src/test/regress/sql/tstypes.sql b/src/test/regress/sql/tstypes.sql
index d058091007705f620aea53d5bd2b6f19e9b135b3..49afc3b23a285819e609f81b9d364a7c81be46a6 100644
--- a/src/test/regress/sql/tstypes.sql
+++ b/src/test/regress/sql/tstypes.sql
@@ -10,6 +10,8 @@ SELECT E'''1 \\''2'''::tsvector;
 SELECT E'''1 \\''2''3'::tsvector;
 SELECT E'''1 \\''2'' 3'::tsvector;
 SELECT E'''1 \\''2'' '' 3'' 4 '::tsvector;
+SELECT $$'\\as' ab\c ab\\c AB\\\c ab\\\\c$$::tsvector;
+SELECT tsvectorin(tsvectorout($$'\\as' ab\c ab\\c AB\\\c ab\\\\c$$::tsvector));
 SELECT '''w'':4A,3B,2C,1D,5 a:8';
 SELECT 'a:3A b:2a'::tsvector || 'ba:1234 a:1B';
 SELECT setweight('w:12B w:13* w:12,5,6 a:1,3* a:3 w asd:1dc asd zxc:81,567,222A'::tsvector, 'c');
@@ -55,6 +57,7 @@ SELECT '1&2&4&5&6'::tsquery;
 SELECT '1&(2&(4&(5|6)))'::tsquery;
 SELECT '1&(2&(4&(5|!6)))'::tsquery;
 SELECT E'1&(''2''&('' 4''&(\\|5 | ''6 \\'' !|&'')))'::tsquery;
+SELECT $$'\\as'$$::tsquery;
 
 SELECT 'a' < 'b & c'::tsquery as "true";
 SELECT 'a' > 'b & c'::tsquery as "false";