diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l
index 68372919ff5a03fa03c7c47f3e04228881e73e1b..a3d4d857c89b5b3c42eddd4bcbddd1fa61317e1e 100644
--- a/src/backend/parser/scan.l
+++ b/src/backend/parser/scan.l
@@ -24,7 +24,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/parser/scan.l,v 1.149 2009/03/04 13:02:32 petere Exp $
+ *	  $PostgreSQL: pgsql/src/backend/parser/scan.l,v 1.150 2009/04/14 22:18:47 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -553,6 +553,7 @@ other			.
 					startlit();
 				}
 {dolqfailed}	{
+					SET_YYLLOC();
 					/* throw back all but the initial "$" */
 					yyless(1);
 					/* and treat it as {other} */
@@ -646,10 +647,15 @@ other			.
 <xd,xui><<EOF>>		{ yyerror("unterminated quoted identifier"); }
 
 {xufailed}	{
+					char		   *ident;
+
+					SET_YYLLOC();
 					/* throw back all but the initial u/U */
 					yyless(1);
-					/* and treat it as {other} */
-					return yytext[0];
+					/* and treat it as {identifier} */
+					ident = downcase_truncate_identifier(yytext, yyleng, true);
+					yylval.str = ident;
+					return IDENT;
 				}
 
 {typecast}		{