diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 8ec562c5e316c65b5f5072f3118f33929c1df5a1..6e894c1799a5858902826386ab3ea6811510920d 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.594 2007/06/15 20:56:49 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.595 2007/06/18 21:40:57 tgl Exp $
  *
  * HISTORY
  *	  AUTHOR			DATE			MAJOR EVENT
@@ -8787,12 +8787,16 @@ ColLabel:	IDENT									{ $$ = $1; }
 
 
 /*
- * Keyword classification lists.  Generally, every keyword present in
+ * Keyword category lists.  Generally, every keyword present in
  * the Postgres grammar should appear in exactly one of these lists.
  *
  * Put a new keyword into the first list that it can go into without causing
  * shift or reduce conflicts.  The earlier lists define "less reserved"
  * categories of keywords.
+ *
+ * Make sure that each keyword's category in keywords.c matches where
+ * it is listed here.  (Someday we may be able to generate these lists and
+ * keywords.c's table from a common master list.)
  */
 
 /* "Unreserved" keywords --- available for use as any kind of name.
diff --git a/src/backend/parser/keywords.c b/src/backend/parser/keywords.c
index b48a0c79583d8a0adc45587d21634060f7a123be..5b62a9c7c984cff95827afa24354b4d9c9318570 100644
--- a/src/backend/parser/keywords.c
+++ b/src/backend/parser/keywords.c
@@ -1,14 +1,14 @@
 /*-------------------------------------------------------------------------
  *
  * keywords.c
- *	  lexical token lookup for reserved words in PostgreSQL
+ *	  lexical token lookup for key words in PostgreSQL
  *
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.188 2007/06/11 01:16:25 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.189 2007/06/18 21:40:58 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -24,380 +24,388 @@
 /* NB: This file is also used by pg_dump. */
 
 /*
- * List of (keyword-name, keyword-token-value) pairs.
+ * List of keyword (name, token-value, category) entries.
  *
- * !!WARNING!!: This list must be sorted, because binary
+ * !!WARNING!!: This list must be sorted by ASCII name, because binary
  *		 search is used to locate entries.
  */
 static const ScanKeyword ScanKeywords[] = {
-	/* name, value */
-	{"abort", ABORT_P},
-	{"absolute", ABSOLUTE_P},
-	{"access", ACCESS},
-	{"action", ACTION},
-	{"add", ADD_P},
-	{"admin", ADMIN},
-	{"after", AFTER},
-	{"aggregate", AGGREGATE},
-	{"all", ALL},
-	{"also", ALSO},
-	{"alter", ALTER},
-	{"always", ALWAYS},
-	{"analyse", ANALYSE},		/* British spelling */
-	{"analyze", ANALYZE},
-	{"and", AND},
-	{"any", ANY},
-	{"array", ARRAY},
-	{"as", AS},
-	{"asc", ASC},
-	{"assertion", ASSERTION},
-	{"assignment", ASSIGNMENT},
-	{"asymmetric", ASYMMETRIC},
-	{"at", AT},
-	{"authorization", AUTHORIZATION},
-	{"backward", BACKWARD},
-	{"before", BEFORE},
-	{"begin", BEGIN_P},
-	{"between", BETWEEN},
-	{"bigint", BIGINT},
-	{"binary", BINARY},
-	{"bit", BIT},
-	{"boolean", BOOLEAN_P},
-	{"both", BOTH},
-	{"by", BY},
-	{"cache", CACHE},
-	{"called", CALLED},
-	{"cascade", CASCADE},
-	{"cascaded", CASCADED},
-	{"case", CASE},
-	{"cast", CAST},
-	{"chain", CHAIN},
-	{"char", CHAR_P},
-	{"character", CHARACTER},
-	{"characteristics", CHARACTERISTICS},
-	{"check", CHECK},
-	{"checkpoint", CHECKPOINT},
-	{"class", CLASS},
-	{"close", CLOSE},
-	{"cluster", CLUSTER},
-	{"coalesce", COALESCE},
-	{"collate", COLLATE},
-	{"column", COLUMN},
-	{"comment", COMMENT},
-	{"commit", COMMIT},
-	{"committed", COMMITTED},
-	{"concurrently", CONCURRENTLY},
-	{"connection", CONNECTION},
-	{"constraint", CONSTRAINT},
-	{"constraints", CONSTRAINTS},
-	{"content", CONTENT_P},
-	{"conversion", CONVERSION_P},
-	{"convert", CONVERT},
-	{"copy", COPY},
-	{"cost", COST},
-	{"create", CREATE},
-	{"createdb", CREATEDB},
-	{"createrole", CREATEROLE},
-	{"createuser", CREATEUSER},
-	{"cross", CROSS},
-	{"csv", CSV},
-	{"current", CURRENT_P},
-	{"current_date", CURRENT_DATE},
-	{"current_role", CURRENT_ROLE},
-	{"current_time", CURRENT_TIME},
-	{"current_timestamp", CURRENT_TIMESTAMP},
-	{"current_user", CURRENT_USER},
-	{"cursor", CURSOR},
-	{"cycle", CYCLE},
-	{"database", DATABASE},
-	{"day", DAY_P},
-	{"deallocate", DEALLOCATE},
-	{"dec", DEC},
-	{"decimal", DECIMAL_P},
-	{"declare", DECLARE},
-	{"default", DEFAULT},
-	{"defaults", DEFAULTS},
-	{"deferrable", DEFERRABLE},
-	{"deferred", DEFERRED},
-	{"definer", DEFINER},
-	{"delete", DELETE_P},
-	{"delimiter", DELIMITER},
-	{"delimiters", DELIMITERS},
-	{"desc", DESC},
-	{"disable", DISABLE_P},
-	{"discard", DISCARD},
-	{"distinct", DISTINCT},
-	{"do", DO},
-	{"document", DOCUMENT_P},
-	{"domain", DOMAIN_P},
-	{"double", DOUBLE_P},
-	{"drop", DROP},
-	{"each", EACH},
-	{"else", ELSE},
-	{"enable", ENABLE_P},
-	{"encoding", ENCODING},
-	{"encrypted", ENCRYPTED},
-	{"end", END_P},
-	{"enum", ENUM_P},
-	{"escape", ESCAPE},
-	{"except", EXCEPT},
-	{"excluding", EXCLUDING},
-	{"exclusive", EXCLUSIVE},
-	{"execute", EXECUTE},
-	{"exists", EXISTS},
-	{"explain", EXPLAIN},
-	{"external", EXTERNAL},
-	{"extract", EXTRACT},
-	{"false", FALSE_P},
-	{"family", FAMILY},
-	{"fetch", FETCH},
-	{"first", FIRST_P},
-	{"float", FLOAT_P},
-	{"for", FOR},
-	{"force", FORCE},
-	{"foreign", FOREIGN},
-	{"forward", FORWARD},
-	{"freeze", FREEZE},
-	{"from", FROM},
-	{"full", FULL},
-	{"function", FUNCTION},
-	{"global", GLOBAL},
-	{"grant", GRANT},
-	{"granted", GRANTED},
-	{"greatest", GREATEST},
-	{"group", GROUP_P},
-	{"handler", HANDLER},
-	{"having", HAVING},
-	{"header", HEADER_P},
-	{"hold", HOLD},
-	{"hour", HOUR_P},
-	{"if", IF_P},
-	{"ilike", ILIKE},
-	{"immediate", IMMEDIATE},
-	{"immutable", IMMUTABLE},
-	{"implicit", IMPLICIT_P},
-	{"in", IN_P},
-	{"including", INCLUDING},
-	{"increment", INCREMENT},
-	{"index", INDEX},
-	{"indexes", INDEXES},
-	{"inherit", INHERIT},
-	{"inherits", INHERITS},
-	{"initially", INITIALLY},
-	{"inner", INNER_P},
-	{"inout", INOUT},
-	{"input", INPUT_P},
-	{"insensitive", INSENSITIVE},
-	{"insert", INSERT},
-	{"instead", INSTEAD},
-	{"int", INT_P},
-	{"integer", INTEGER},
-	{"intersect", INTERSECT},
-	{"interval", INTERVAL},
-	{"into", INTO},
-	{"invoker", INVOKER},
-	{"is", IS},
-	{"isnull", ISNULL},
-	{"isolation", ISOLATION},
-	{"join", JOIN},
-	{"key", KEY},
-	{"lancompiler", LANCOMPILER},
-	{"language", LANGUAGE},
-	{"large", LARGE_P},
-	{"last", LAST_P},
-	{"leading", LEADING},
-	{"least", LEAST},
-	{"left", LEFT},
-	{"level", LEVEL},
-	{"like", LIKE},
-	{"limit", LIMIT},
-	{"listen", LISTEN},
-	{"load", LOAD},
-	{"local", LOCAL},
-	{"localtime", LOCALTIME},
-	{"localtimestamp", LOCALTIMESTAMP},
-	{"location", LOCATION},
-	{"lock", LOCK_P},
-	{"login", LOGIN_P},
-	{"match", MATCH},
-	{"maxvalue", MAXVALUE},
-	{"minute", MINUTE_P},
-	{"minvalue", MINVALUE},
-	{"mode", MODE},
-	{"month", MONTH_P},
-	{"move", MOVE},
-	{"name", NAME_P},
-	{"names", NAMES},
-	{"national", NATIONAL},
-	{"natural", NATURAL},
-	{"nchar", NCHAR},
-	{"new", NEW},
-	{"next", NEXT},
-	{"no", NO},
-	{"nocreatedb", NOCREATEDB},
-	{"nocreaterole", NOCREATEROLE},
-	{"nocreateuser", NOCREATEUSER},
-	{"noinherit", NOINHERIT},
-	{"nologin", NOLOGIN_P},
-	{"none", NONE},
-	{"nosuperuser", NOSUPERUSER},
-	{"not", NOT},
-	{"nothing", NOTHING},
-	{"notify", NOTIFY},
-	{"notnull", NOTNULL},
-	{"nowait", NOWAIT},
-	{"null", NULL_P},
-	{"nullif", NULLIF},
-	{"nulls", NULLS_P},
-	{"numeric", NUMERIC},
-	{"object", OBJECT_P},
-	{"of", OF},
-	{"off", OFF},
-	{"offset", OFFSET},
-	{"oids", OIDS},
-	{"old", OLD},
-	{"on", ON},
-	{"only", ONLY},
-	{"operator", OPERATOR},
-	{"option", OPTION},
-	{"or", OR},
-	{"order", ORDER},
-	{"out", OUT_P},
-	{"outer", OUTER_P},
-	{"overlaps", OVERLAPS},
-	{"overlay", OVERLAY},
-	{"owned", OWNED},
-	{"owner", OWNER},
-	{"partial", PARTIAL},
-	{"password", PASSWORD},
-	{"placing", PLACING},
-	{"plans", PLANS},
-	{"position", POSITION},
-	{"precision", PRECISION},
-	{"prepare", PREPARE},
-	{"prepared", PREPARED},
-	{"preserve", PRESERVE},
-	{"primary", PRIMARY},
-	{"prior", PRIOR},
-	{"privileges", PRIVILEGES},
-	{"procedural", PROCEDURAL},
-	{"procedure", PROCEDURE},
-	{"quote", QUOTE},
-	{"read", READ},
-	{"real", REAL},
-	{"reassign", REASSIGN},
-	{"recheck", RECHECK},
-	{"references", REFERENCES},
-	{"reindex", REINDEX},
-	{"relative", RELATIVE_P},
-	{"release", RELEASE},
-	{"rename", RENAME},
-	{"repeatable", REPEATABLE},
-	{"replace", REPLACE},
-	{"replica", REPLICA},
-	{"reset", RESET},
-	{"restart", RESTART},
-	{"restrict", RESTRICT},
-	{"returning", RETURNING},
-	{"returns", RETURNS},
-	{"revoke", REVOKE},
-	{"right", RIGHT},
-	{"role", ROLE},
-	{"rollback", ROLLBACK},
-	{"row", ROW},
-	{"rows", ROWS},
-	{"rule", RULE},
-	{"savepoint", SAVEPOINT},
-	{"schema", SCHEMA},
-	{"scroll", SCROLL},
-	{"second", SECOND_P},
-	{"security", SECURITY},
-	{"select", SELECT},
-	{"sequence", SEQUENCE},
-	{"serializable", SERIALIZABLE},
-	{"session", SESSION},
-	{"session_user", SESSION_USER},
-	{"set", SET},
-	{"setof", SETOF},
-	{"share", SHARE},
-	{"show", SHOW},
-	{"similar", SIMILAR},
-	{"simple", SIMPLE},
-	{"smallint", SMALLINT},
-	{"some", SOME},
-	{"stable", STABLE},
-	{"standalone", STANDALONE_P},
-	{"start", START},
-	{"statement", STATEMENT},
-	{"statistics", STATISTICS},
-	{"stdin", STDIN},
-	{"stdout", STDOUT},
-	{"storage", STORAGE},
-	{"strict", STRICT_P},
-	{"strip", STRIP_P},
-	{"substring", SUBSTRING},
-	{"superuser", SUPERUSER_P},
-	{"symmetric", SYMMETRIC},
-	{"sysid", SYSID},
-	{"system", SYSTEM_P},
-	{"table", TABLE},
-	{"tablespace", TABLESPACE},
-	{"temp", TEMP},
-	{"template", TEMPLATE},
-	{"temporary", TEMPORARY},
-	{"then", THEN},
-	{"time", TIME},
-	{"timestamp", TIMESTAMP},
-	{"to", TO},
-	{"trailing", TRAILING},
-	{"transaction", TRANSACTION},
-	{"treat", TREAT},
-	{"trigger", TRIGGER},
-	{"trim", TRIM},
-	{"true", TRUE_P},
-	{"truncate", TRUNCATE},
-	{"trusted", TRUSTED},
-	{"type", TYPE_P},
-	{"uncommitted", UNCOMMITTED},
-	{"unencrypted", UNENCRYPTED},
-	{"union", UNION},
-	{"unique", UNIQUE},
-	{"unknown", UNKNOWN},
-	{"unlisten", UNLISTEN},
-	{"until", UNTIL},
-	{"update", UPDATE},
-	{"user", USER},
-	{"using", USING},
-	{"vacuum", VACUUM},
-	{"valid", VALID},
-	{"validator", VALIDATOR},
-	{"value", VALUE_P},
-	{"values", VALUES},
-	{"varchar", VARCHAR},
-	{"varying", VARYING},
-	{"verbose", VERBOSE},
-	{"version", VERSION_P},
-	{"view", VIEW},
-	{"volatile", VOLATILE},
-	{"when", WHEN},
-	{"where", WHERE},
-	{"whitespace", WHITESPACE_P},
-	{"with", WITH},
-	{"without", WITHOUT},
-	{"work", WORK},
-	{"write", WRITE},
-	{"xml", XML_P},
-	{"xmlattributes", XMLATTRIBUTES},
-	{"xmlconcat", XMLCONCAT},
-	{"xmlelement", XMLELEMENT},
-	{"xmlforest", XMLFOREST},
-	{"xmlparse", XMLPARSE},
-	{"xmlpi", XMLPI},
-	{"xmlroot", XMLROOT},
-	{"xmlserialize", XMLSERIALIZE},
-	{"year", YEAR_P},
-	{"yes", YES_P},
-	{"zone", ZONE},
+	/* name, value, category */
+	{"abort", ABORT_P, UNRESERVED_KEYWORD},
+	{"absolute", ABSOLUTE_P, UNRESERVED_KEYWORD},
+	{"access", ACCESS, UNRESERVED_KEYWORD},
+	{"action", ACTION, UNRESERVED_KEYWORD},
+	{"add", ADD_P, UNRESERVED_KEYWORD},
+	{"admin", ADMIN, UNRESERVED_KEYWORD},
+	{"after", AFTER, UNRESERVED_KEYWORD},
+	{"aggregate", AGGREGATE, UNRESERVED_KEYWORD},
+	{"all", ALL, RESERVED_KEYWORD},
+	{"also", ALSO, UNRESERVED_KEYWORD},
+	{"alter", ALTER, UNRESERVED_KEYWORD},
+	{"always", ALWAYS, UNRESERVED_KEYWORD},
+	{"analyse", ANALYSE, RESERVED_KEYWORD},		/* British spelling */
+	{"analyze", ANALYZE, RESERVED_KEYWORD},
+	{"and", AND, RESERVED_KEYWORD},
+	{"any", ANY, RESERVED_KEYWORD},
+	{"array", ARRAY, RESERVED_KEYWORD},
+	{"as", AS, RESERVED_KEYWORD},
+	{"asc", ASC, RESERVED_KEYWORD},
+	{"assertion", ASSERTION, UNRESERVED_KEYWORD},
+	{"assignment", ASSIGNMENT, UNRESERVED_KEYWORD},
+	{"asymmetric", ASYMMETRIC, RESERVED_KEYWORD},
+	{"at", AT, UNRESERVED_KEYWORD},
+	{"authorization", AUTHORIZATION, TYPE_FUNC_NAME_KEYWORD},
+	{"backward", BACKWARD, UNRESERVED_KEYWORD},
+	{"before", BEFORE, UNRESERVED_KEYWORD},
+	{"begin", BEGIN_P, UNRESERVED_KEYWORD},
+	{"between", BETWEEN, TYPE_FUNC_NAME_KEYWORD},
+	{"bigint", BIGINT, COL_NAME_KEYWORD},
+	{"binary", BINARY, TYPE_FUNC_NAME_KEYWORD},
+	{"bit", BIT, COL_NAME_KEYWORD},
+	{"boolean", BOOLEAN_P, COL_NAME_KEYWORD},
+	{"both", BOTH, RESERVED_KEYWORD},
+	{"by", BY, UNRESERVED_KEYWORD},
+	{"cache", CACHE, UNRESERVED_KEYWORD},
+	{"called", CALLED, UNRESERVED_KEYWORD},
+	{"cascade", CASCADE, UNRESERVED_KEYWORD},
+	{"cascaded", CASCADED, UNRESERVED_KEYWORD},
+	{"case", CASE, RESERVED_KEYWORD},
+	{"cast", CAST, RESERVED_KEYWORD},
+	{"chain", CHAIN, UNRESERVED_KEYWORD},
+	{"char", CHAR_P, COL_NAME_KEYWORD},
+	{"character", CHARACTER, COL_NAME_KEYWORD},
+	{"characteristics", CHARACTERISTICS, UNRESERVED_KEYWORD},
+	{"check", CHECK, RESERVED_KEYWORD},
+	{"checkpoint", CHECKPOINT, UNRESERVED_KEYWORD},
+	{"class", CLASS, UNRESERVED_KEYWORD},
+	{"close", CLOSE, UNRESERVED_KEYWORD},
+	{"cluster", CLUSTER, UNRESERVED_KEYWORD},
+	{"coalesce", COALESCE, COL_NAME_KEYWORD},
+	{"collate", COLLATE, RESERVED_KEYWORD},
+	{"column", COLUMN, RESERVED_KEYWORD},
+	{"comment", COMMENT, UNRESERVED_KEYWORD},
+	{"commit", COMMIT, UNRESERVED_KEYWORD},
+	{"committed", COMMITTED, UNRESERVED_KEYWORD},
+	{"concurrently", CONCURRENTLY, UNRESERVED_KEYWORD},
+	{"connection", CONNECTION, UNRESERVED_KEYWORD},
+	{"constraint", CONSTRAINT, RESERVED_KEYWORD},
+	{"constraints", CONSTRAINTS, UNRESERVED_KEYWORD},
+	{"content", CONTENT_P, UNRESERVED_KEYWORD},
+	{"conversion", CONVERSION_P, UNRESERVED_KEYWORD},
+	{"convert", CONVERT, COL_NAME_KEYWORD},
+	{"copy", COPY, UNRESERVED_KEYWORD},
+	{"cost", COST, UNRESERVED_KEYWORD},
+	{"create", CREATE, RESERVED_KEYWORD},
+	{"createdb", CREATEDB, UNRESERVED_KEYWORD},
+	{"createrole", CREATEROLE, UNRESERVED_KEYWORD},
+	{"createuser", CREATEUSER, UNRESERVED_KEYWORD},
+	{"cross", CROSS, TYPE_FUNC_NAME_KEYWORD},
+	{"csv", CSV, UNRESERVED_KEYWORD},
+	{"current", CURRENT_P, UNRESERVED_KEYWORD},
+	{"current_date", CURRENT_DATE, RESERVED_KEYWORD},
+	{"current_role", CURRENT_ROLE, RESERVED_KEYWORD},
+	{"current_time", CURRENT_TIME, RESERVED_KEYWORD},
+	{"current_timestamp", CURRENT_TIMESTAMP, RESERVED_KEYWORD},
+	{"current_user", CURRENT_USER, RESERVED_KEYWORD},
+	{"cursor", CURSOR, UNRESERVED_KEYWORD},
+	{"cycle", CYCLE, UNRESERVED_KEYWORD},
+	{"database", DATABASE, UNRESERVED_KEYWORD},
+	{"day", DAY_P, UNRESERVED_KEYWORD},
+	{"deallocate", DEALLOCATE, UNRESERVED_KEYWORD},
+	{"dec", DEC, COL_NAME_KEYWORD},
+	{"decimal", DECIMAL_P, COL_NAME_KEYWORD},
+	{"declare", DECLARE, UNRESERVED_KEYWORD},
+	{"default", DEFAULT, RESERVED_KEYWORD},
+	{"defaults", DEFAULTS, UNRESERVED_KEYWORD},
+	{"deferrable", DEFERRABLE, RESERVED_KEYWORD},
+	{"deferred", DEFERRED, UNRESERVED_KEYWORD},
+	{"definer", DEFINER, UNRESERVED_KEYWORD},
+	{"delete", DELETE_P, UNRESERVED_KEYWORD},
+	{"delimiter", DELIMITER, UNRESERVED_KEYWORD},
+	{"delimiters", DELIMITERS, UNRESERVED_KEYWORD},
+	{"desc", DESC, RESERVED_KEYWORD},
+	{"disable", DISABLE_P, UNRESERVED_KEYWORD},
+	{"discard", DISCARD, UNRESERVED_KEYWORD},
+	{"distinct", DISTINCT, RESERVED_KEYWORD},
+	{"do", DO, RESERVED_KEYWORD},
+	{"document", DOCUMENT_P, UNRESERVED_KEYWORD},
+	{"domain", DOMAIN_P, UNRESERVED_KEYWORD},
+	{"double", DOUBLE_P, UNRESERVED_KEYWORD},
+	{"drop", DROP, UNRESERVED_KEYWORD},
+	{"each", EACH, UNRESERVED_KEYWORD},
+	{"else", ELSE, RESERVED_KEYWORD},
+	{"enable", ENABLE_P, UNRESERVED_KEYWORD},
+	{"encoding", ENCODING, UNRESERVED_KEYWORD},
+	{"encrypted", ENCRYPTED, UNRESERVED_KEYWORD},
+	{"end", END_P, RESERVED_KEYWORD},
+	{"enum", ENUM_P, UNRESERVED_KEYWORD},
+	{"escape", ESCAPE, UNRESERVED_KEYWORD},
+	{"except", EXCEPT, RESERVED_KEYWORD},
+	{"excluding", EXCLUDING, UNRESERVED_KEYWORD},
+	{"exclusive", EXCLUSIVE, UNRESERVED_KEYWORD},
+	{"execute", EXECUTE, UNRESERVED_KEYWORD},
+	{"exists", EXISTS, COL_NAME_KEYWORD},
+	{"explain", EXPLAIN, UNRESERVED_KEYWORD},
+	{"external", EXTERNAL, UNRESERVED_KEYWORD},
+	{"extract", EXTRACT, COL_NAME_KEYWORD},
+	{"false", FALSE_P, RESERVED_KEYWORD},
+	{"family", FAMILY, UNRESERVED_KEYWORD},
+	{"fetch", FETCH, UNRESERVED_KEYWORD},
+	{"first", FIRST_P, UNRESERVED_KEYWORD},
+	{"float", FLOAT_P, COL_NAME_KEYWORD},
+	{"for", FOR, RESERVED_KEYWORD},
+	{"force", FORCE, UNRESERVED_KEYWORD},
+	{"foreign", FOREIGN, RESERVED_KEYWORD},
+	{"forward", FORWARD, UNRESERVED_KEYWORD},
+	{"freeze", FREEZE, TYPE_FUNC_NAME_KEYWORD},
+	{"from", FROM, RESERVED_KEYWORD},
+	{"full", FULL, TYPE_FUNC_NAME_KEYWORD},
+	{"function", FUNCTION, UNRESERVED_KEYWORD},
+	{"global", GLOBAL, UNRESERVED_KEYWORD},
+	{"grant", GRANT, RESERVED_KEYWORD},
+	{"granted", GRANTED, UNRESERVED_KEYWORD},
+	{"greatest", GREATEST, COL_NAME_KEYWORD},
+	{"group", GROUP_P, RESERVED_KEYWORD},
+	{"handler", HANDLER, UNRESERVED_KEYWORD},
+	{"having", HAVING, RESERVED_KEYWORD},
+	{"header", HEADER_P, UNRESERVED_KEYWORD},
+	{"hold", HOLD, UNRESERVED_KEYWORD},
+	{"hour", HOUR_P, UNRESERVED_KEYWORD},
+	{"if", IF_P, UNRESERVED_KEYWORD},
+	{"ilike", ILIKE, TYPE_FUNC_NAME_KEYWORD},
+	{"immediate", IMMEDIATE, UNRESERVED_KEYWORD},
+	{"immutable", IMMUTABLE, UNRESERVED_KEYWORD},
+	{"implicit", IMPLICIT_P, UNRESERVED_KEYWORD},
+	{"in", IN_P, RESERVED_KEYWORD},
+	{"including", INCLUDING, UNRESERVED_KEYWORD},
+	{"increment", INCREMENT, UNRESERVED_KEYWORD},
+	{"index", INDEX, UNRESERVED_KEYWORD},
+	{"indexes", INDEXES, UNRESERVED_KEYWORD},
+	{"inherit", INHERIT, UNRESERVED_KEYWORD},
+	{"inherits", INHERITS, UNRESERVED_KEYWORD},
+	{"initially", INITIALLY, RESERVED_KEYWORD},
+	{"inner", INNER_P, TYPE_FUNC_NAME_KEYWORD},
+	{"inout", INOUT, COL_NAME_KEYWORD},
+	{"input", INPUT_P, UNRESERVED_KEYWORD},
+	{"insensitive", INSENSITIVE, UNRESERVED_KEYWORD},
+	{"insert", INSERT, UNRESERVED_KEYWORD},
+	{"instead", INSTEAD, UNRESERVED_KEYWORD},
+	{"int", INT_P, COL_NAME_KEYWORD},
+	{"integer", INTEGER, COL_NAME_KEYWORD},
+	{"intersect", INTERSECT, RESERVED_KEYWORD},
+	{"interval", INTERVAL, COL_NAME_KEYWORD},
+	{"into", INTO, RESERVED_KEYWORD},
+	{"invoker", INVOKER, UNRESERVED_KEYWORD},
+	{"is", IS, TYPE_FUNC_NAME_KEYWORD},
+	{"isnull", ISNULL, TYPE_FUNC_NAME_KEYWORD},
+	{"isolation", ISOLATION, UNRESERVED_KEYWORD},
+	{"join", JOIN, TYPE_FUNC_NAME_KEYWORD},
+	{"key", KEY, UNRESERVED_KEYWORD},
+	{"lancompiler", LANCOMPILER, UNRESERVED_KEYWORD},
+	{"language", LANGUAGE, UNRESERVED_KEYWORD},
+	{"large", LARGE_P, UNRESERVED_KEYWORD},
+	{"last", LAST_P, UNRESERVED_KEYWORD},
+	{"leading", LEADING, RESERVED_KEYWORD},
+	{"least", LEAST, COL_NAME_KEYWORD},
+	{"left", LEFT, TYPE_FUNC_NAME_KEYWORD},
+	{"level", LEVEL, UNRESERVED_KEYWORD},
+	{"like", LIKE, TYPE_FUNC_NAME_KEYWORD},
+	{"limit", LIMIT, RESERVED_KEYWORD},
+	{"listen", LISTEN, UNRESERVED_KEYWORD},
+	{"load", LOAD, UNRESERVED_KEYWORD},
+	{"local", LOCAL, UNRESERVED_KEYWORD},
+	{"localtime", LOCALTIME, RESERVED_KEYWORD},
+	{"localtimestamp", LOCALTIMESTAMP, RESERVED_KEYWORD},
+	{"location", LOCATION, UNRESERVED_KEYWORD},
+	{"lock", LOCK_P, UNRESERVED_KEYWORD},
+	{"login", LOGIN_P, UNRESERVED_KEYWORD},
+	{"match", MATCH, UNRESERVED_KEYWORD},
+	{"maxvalue", MAXVALUE, UNRESERVED_KEYWORD},
+	{"minute", MINUTE_P, UNRESERVED_KEYWORD},
+	{"minvalue", MINVALUE, UNRESERVED_KEYWORD},
+	{"mode", MODE, UNRESERVED_KEYWORD},
+	{"month", MONTH_P, UNRESERVED_KEYWORD},
+	{"move", MOVE, UNRESERVED_KEYWORD},
+	{"name", NAME_P, UNRESERVED_KEYWORD},
+	{"names", NAMES, UNRESERVED_KEYWORD},
+	{"national", NATIONAL, COL_NAME_KEYWORD},
+	{"natural", NATURAL, TYPE_FUNC_NAME_KEYWORD},
+	{"nchar", NCHAR, COL_NAME_KEYWORD},
+	{"new", NEW, RESERVED_KEYWORD},
+	{"next", NEXT, UNRESERVED_KEYWORD},
+	{"no", NO, UNRESERVED_KEYWORD},
+	{"nocreatedb", NOCREATEDB, UNRESERVED_KEYWORD},
+	{"nocreaterole", NOCREATEROLE, UNRESERVED_KEYWORD},
+	{"nocreateuser", NOCREATEUSER, UNRESERVED_KEYWORD},
+	{"noinherit", NOINHERIT, UNRESERVED_KEYWORD},
+	{"nologin", NOLOGIN_P, UNRESERVED_KEYWORD},
+	{"none", NONE, COL_NAME_KEYWORD},
+	{"nosuperuser", NOSUPERUSER, UNRESERVED_KEYWORD},
+	{"not", NOT, RESERVED_KEYWORD},
+	{"nothing", NOTHING, UNRESERVED_KEYWORD},
+	{"notify", NOTIFY, UNRESERVED_KEYWORD},
+	{"notnull", NOTNULL, TYPE_FUNC_NAME_KEYWORD},
+	{"nowait", NOWAIT, UNRESERVED_KEYWORD},
+	{"null", NULL_P, RESERVED_KEYWORD},
+	{"nullif", NULLIF, COL_NAME_KEYWORD},
+	{"nulls", NULLS_P, UNRESERVED_KEYWORD},
+	{"numeric", NUMERIC, COL_NAME_KEYWORD},
+	{"object", OBJECT_P, UNRESERVED_KEYWORD},
+	{"of", OF, UNRESERVED_KEYWORD},
+	{"off", OFF, RESERVED_KEYWORD},
+	{"offset", OFFSET, RESERVED_KEYWORD},
+	{"oids", OIDS, UNRESERVED_KEYWORD},
+	{"old", OLD, RESERVED_KEYWORD},
+	{"on", ON, RESERVED_KEYWORD},
+	{"only", ONLY, RESERVED_KEYWORD},
+	{"operator", OPERATOR, UNRESERVED_KEYWORD},
+	{"option", OPTION, UNRESERVED_KEYWORD},
+	{"or", OR, RESERVED_KEYWORD},
+	{"order", ORDER, RESERVED_KEYWORD},
+	{"out", OUT_P, COL_NAME_KEYWORD},
+	{"outer", OUTER_P, TYPE_FUNC_NAME_KEYWORD},
+	{"overlaps", OVERLAPS, TYPE_FUNC_NAME_KEYWORD},
+	{"overlay", OVERLAY, COL_NAME_KEYWORD},
+	{"owned", OWNED, UNRESERVED_KEYWORD},
+	{"owner", OWNER, UNRESERVED_KEYWORD},
+	{"partial", PARTIAL, UNRESERVED_KEYWORD},
+	{"password", PASSWORD, UNRESERVED_KEYWORD},
+	{"placing", PLACING, RESERVED_KEYWORD},
+	{"plans", PLANS, UNRESERVED_KEYWORD},
+	{"position", POSITION, COL_NAME_KEYWORD},
+	{"precision", PRECISION, COL_NAME_KEYWORD},
+	{"prepare", PREPARE, UNRESERVED_KEYWORD},
+	{"prepared", PREPARED, UNRESERVED_KEYWORD},
+	{"preserve", PRESERVE, UNRESERVED_KEYWORD},
+	{"primary", PRIMARY, RESERVED_KEYWORD},
+	{"prior", PRIOR, UNRESERVED_KEYWORD},
+	{"privileges", PRIVILEGES, UNRESERVED_KEYWORD},
+	{"procedural", PROCEDURAL, UNRESERVED_KEYWORD},
+	{"procedure", PROCEDURE, UNRESERVED_KEYWORD},
+	{"quote", QUOTE, UNRESERVED_KEYWORD},
+	{"read", READ, UNRESERVED_KEYWORD},
+	{"real", REAL, COL_NAME_KEYWORD},
+	{"reassign", REASSIGN, UNRESERVED_KEYWORD},
+	{"recheck", RECHECK, UNRESERVED_KEYWORD},
+	{"references", REFERENCES, RESERVED_KEYWORD},
+	{"reindex", REINDEX, UNRESERVED_KEYWORD},
+	{"relative", RELATIVE_P, UNRESERVED_KEYWORD},
+	{"release", RELEASE, UNRESERVED_KEYWORD},
+	{"rename", RENAME, UNRESERVED_KEYWORD},
+	{"repeatable", REPEATABLE, UNRESERVED_KEYWORD},
+	{"replace", REPLACE, UNRESERVED_KEYWORD},
+	{"replica", REPLICA, UNRESERVED_KEYWORD},
+	{"reset", RESET, UNRESERVED_KEYWORD},
+	{"restart", RESTART, UNRESERVED_KEYWORD},
+	{"restrict", RESTRICT, UNRESERVED_KEYWORD},
+	{"returning", RETURNING, RESERVED_KEYWORD},
+	{"returns", RETURNS, UNRESERVED_KEYWORD},
+	{"revoke", REVOKE, UNRESERVED_KEYWORD},
+	{"right", RIGHT, TYPE_FUNC_NAME_KEYWORD},
+	{"role", ROLE, UNRESERVED_KEYWORD},
+	{"rollback", ROLLBACK, UNRESERVED_KEYWORD},
+	{"row", ROW, COL_NAME_KEYWORD},
+	{"rows", ROWS, UNRESERVED_KEYWORD},
+	{"rule", RULE, UNRESERVED_KEYWORD},
+	{"savepoint", SAVEPOINT, UNRESERVED_KEYWORD},
+	{"schema", SCHEMA, UNRESERVED_KEYWORD},
+	{"scroll", SCROLL, UNRESERVED_KEYWORD},
+	{"second", SECOND_P, UNRESERVED_KEYWORD},
+	{"security", SECURITY, UNRESERVED_KEYWORD},
+	{"select", SELECT, RESERVED_KEYWORD},
+	{"sequence", SEQUENCE, UNRESERVED_KEYWORD},
+	{"serializable", SERIALIZABLE, UNRESERVED_KEYWORD},
+	{"session", SESSION, UNRESERVED_KEYWORD},
+	{"session_user", SESSION_USER, RESERVED_KEYWORD},
+	{"set", SET, UNRESERVED_KEYWORD},
+	{"setof", SETOF, COL_NAME_KEYWORD},
+	{"share", SHARE, UNRESERVED_KEYWORD},
+	{"show", SHOW, UNRESERVED_KEYWORD},
+	{"similar", SIMILAR, TYPE_FUNC_NAME_KEYWORD},
+	{"simple", SIMPLE, UNRESERVED_KEYWORD},
+	{"smallint", SMALLINT, COL_NAME_KEYWORD},
+	{"some", SOME, RESERVED_KEYWORD},
+	{"stable", STABLE, UNRESERVED_KEYWORD},
+	{"standalone", STANDALONE_P, UNRESERVED_KEYWORD},
+	{"start", START, UNRESERVED_KEYWORD},
+	{"statement", STATEMENT, UNRESERVED_KEYWORD},
+	{"statistics", STATISTICS, UNRESERVED_KEYWORD},
+	{"stdin", STDIN, UNRESERVED_KEYWORD},
+	{"stdout", STDOUT, UNRESERVED_KEYWORD},
+	{"storage", STORAGE, UNRESERVED_KEYWORD},
+	{"strict", STRICT_P, UNRESERVED_KEYWORD},
+	{"strip", STRIP_P, UNRESERVED_KEYWORD},
+	{"substring", SUBSTRING, COL_NAME_KEYWORD},
+	{"superuser", SUPERUSER_P, UNRESERVED_KEYWORD},
+	{"symmetric", SYMMETRIC, RESERVED_KEYWORD},
+	{"sysid", SYSID, UNRESERVED_KEYWORD},
+	{"system", SYSTEM_P, UNRESERVED_KEYWORD},
+	{"table", TABLE, RESERVED_KEYWORD},
+	{"tablespace", TABLESPACE, UNRESERVED_KEYWORD},
+	{"temp", TEMP, UNRESERVED_KEYWORD},
+	{"template", TEMPLATE, UNRESERVED_KEYWORD},
+	{"temporary", TEMPORARY, UNRESERVED_KEYWORD},
+	{"then", THEN, RESERVED_KEYWORD},
+	{"time", TIME, COL_NAME_KEYWORD},
+	{"timestamp", TIMESTAMP, COL_NAME_KEYWORD},
+	{"to", TO, RESERVED_KEYWORD},
+	{"trailing", TRAILING, RESERVED_KEYWORD},
+	{"transaction", TRANSACTION, UNRESERVED_KEYWORD},
+	{"treat", TREAT, COL_NAME_KEYWORD},
+	{"trigger", TRIGGER, UNRESERVED_KEYWORD},
+	{"trim", TRIM, COL_NAME_KEYWORD},
+	{"true", TRUE_P, RESERVED_KEYWORD},
+	{"truncate", TRUNCATE, UNRESERVED_KEYWORD},
+	{"trusted", TRUSTED, UNRESERVED_KEYWORD},
+	{"type", TYPE_P, UNRESERVED_KEYWORD},
+	{"uncommitted", UNCOMMITTED, UNRESERVED_KEYWORD},
+	{"unencrypted", UNENCRYPTED, UNRESERVED_KEYWORD},
+	{"union", UNION, RESERVED_KEYWORD},
+	{"unique", UNIQUE, RESERVED_KEYWORD},
+	{"unknown", UNKNOWN, UNRESERVED_KEYWORD},
+	{"unlisten", UNLISTEN, UNRESERVED_KEYWORD},
+	{"until", UNTIL, UNRESERVED_KEYWORD},
+	{"update", UPDATE, UNRESERVED_KEYWORD},
+	{"user", USER, RESERVED_KEYWORD},
+	{"using", USING, RESERVED_KEYWORD},
+	{"vacuum", VACUUM, UNRESERVED_KEYWORD},
+	{"valid", VALID, UNRESERVED_KEYWORD},
+	{"validator", VALIDATOR, UNRESERVED_KEYWORD},
+	{"value", VALUE_P, UNRESERVED_KEYWORD},
+	{"values", VALUES, COL_NAME_KEYWORD},
+	{"varchar", VARCHAR, COL_NAME_KEYWORD},
+	{"varying", VARYING, UNRESERVED_KEYWORD},
+	{"verbose", VERBOSE, TYPE_FUNC_NAME_KEYWORD},
+	{"version", VERSION_P, UNRESERVED_KEYWORD},
+	{"view", VIEW, UNRESERVED_KEYWORD},
+	{"volatile", VOLATILE, UNRESERVED_KEYWORD},
+	{"when", WHEN, RESERVED_KEYWORD},
+	{"where", WHERE, RESERVED_KEYWORD},
+	{"whitespace", WHITESPACE_P, UNRESERVED_KEYWORD},
+	/*
+	 * XXX we mark WITH as reserved to force it to be quoted in dumps, even
+	 * though it is currently unreserved according to gram.y.  This is because
+	 * we expect we'll have to make it reserved to implement SQL WITH clauses.
+	 * If that patch manages to do without reserving WITH, adjust this entry
+	 * at that time; in any case this should be back in sync with gram.y
+	 * after WITH clauses are implemented.
+	 */
+	{"with", WITH, RESERVED_KEYWORD},
+	{"without", WITHOUT, UNRESERVED_KEYWORD},
+	{"work", WORK, UNRESERVED_KEYWORD},
+	{"write", WRITE, UNRESERVED_KEYWORD},
+	{"xml", XML_P, UNRESERVED_KEYWORD},
+	{"xmlattributes", XMLATTRIBUTES, COL_NAME_KEYWORD},
+	{"xmlconcat", XMLCONCAT, COL_NAME_KEYWORD},
+	{"xmlelement", XMLELEMENT, COL_NAME_KEYWORD},
+	{"xmlforest", XMLFOREST, COL_NAME_KEYWORD},
+	{"xmlparse", XMLPARSE, COL_NAME_KEYWORD},
+	{"xmlpi", XMLPI, COL_NAME_KEYWORD},
+	{"xmlroot", XMLROOT, COL_NAME_KEYWORD},
+	{"xmlserialize", XMLSERIALIZE, COL_NAME_KEYWORD},
+	{"year", YEAR_P, UNRESERVED_KEYWORD},
+	{"yes", YES_P, UNRESERVED_KEYWORD},
+	{"zone", ZONE, UNRESERVED_KEYWORD},
 };
 
 /*
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 49c7821cef08a67334176d2db2daf81b0b4f7f97..df5dbec6078587d77ff249eb2a3843a7585a5b07 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.261 2007/06/11 22:22:42 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.262 2007/06/18 21:40:58 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -5175,15 +5175,16 @@ quote_identifier(const char *ident)
 	if (safe)
 	{
 		/*
-		 * Check for keyword.  This test is overly strong, since many of the
-		 * "keywords" known to the parser are usable as column names, but the
-		 * parser doesn't provide any easy way to test for whether an
-		 * identifier is safe or not... so be safe not sorry.
+		 * Check for keyword.  We quote keywords except for unreserved ones.
+		 * (In some cases we could avoid quoting a col_name or type_func_name
+		 * keyword, but it seems much harder than it's worth to tell that.)
 		 *
 		 * Note: ScanKeywordLookup() does case-insensitive comparison, but
 		 * that's fine, since we already know we have all-lower-case.
 		 */
-		if (ScanKeywordLookup(ident) != NULL)
+		const ScanKeyword *keyword = ScanKeywordLookup(ident);
+
+		if (keyword != NULL && keyword->category != UNRESERVED_KEYWORD)
 			safe = false;
 	}
 
diff --git a/src/bin/pg_dump/dumputils.c b/src/bin/pg_dump/dumputils.c
index c122aaad1aa6345a67e56972a18840c178a75a46..0fc42ca7c26b4f832506615b42a0a5aad1777d30 100644
--- a/src/bin/pg_dump/dumputils.c
+++ b/src/bin/pg_dump/dumputils.c
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/bin/pg_dump/dumputils.c,v 1.35 2007/01/05 22:19:48 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/dumputils.c,v 1.36 2007/06/18 21:40:58 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,11 +53,8 @@ fmtId(const char *rawid)
 	 * These checks need to match the identifier production in scan.l. Don't
 	 * use islower() etc.
 	 */
-
-	if (ScanKeywordLookup(rawid))
-		need_quotes = true;
 	/* slightly different rules for first character */
-	else if (!((rawid[0] >= 'a' && rawid[0] <= 'z') || rawid[0] == '_'))
+	if (!((rawid[0] >= 'a' && rawid[0] <= 'z') || rawid[0] == '_'))
 		need_quotes = true;
 	else
 	{
@@ -74,6 +71,22 @@ fmtId(const char *rawid)
 		}
 	}
 
+	if (!need_quotes)
+	{
+		/*
+		 * Check for keyword.  We quote keywords except for unreserved ones.
+		 * (In some cases we could avoid quoting a col_name or type_func_name
+		 * keyword, but it seems much harder than it's worth to tell that.)
+		 *
+		 * Note: ScanKeywordLookup() does case-insensitive comparison, but
+		 * that's fine, since we already know we have all-lower-case.
+		 */
+		const ScanKeyword *keyword = ScanKeywordLookup(rawid);
+
+		if (keyword != NULL && keyword->category != UNRESERVED_KEYWORD)
+			need_quotes = true;
+	}
+
 	if (!need_quotes)
 	{
 		/* no quoting needed */
diff --git a/src/include/parser/keywords.h b/src/include/parser/keywords.h
index d16b5374a98c6553563d2920e6dd5f714bdce7bf..4cb37e5288ddf8fa350c0bc81403076ec1de2ccf 100644
--- a/src/include/parser/keywords.h
+++ b/src/include/parser/keywords.h
@@ -1,23 +1,31 @@
 /*-------------------------------------------------------------------------
  *
  * keywords.h
- *	  lexical token lookup for reserved words in postgres SQL
+ *	  lexical token lookup for key words in PostgreSQL
  *
  *
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/parser/keywords.h,v 1.22 2007/01/05 22:19:56 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/parser/keywords.h,v 1.23 2007/06/18 21:40:58 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 #ifndef KEYWORDS_H
 #define KEYWORDS_H
 
+/* Keyword categories --- should match lists in gram.y */
+#define UNRESERVED_KEYWORD		0
+#define COL_NAME_KEYWORD		1
+#define TYPE_FUNC_NAME_KEYWORD	2
+#define RESERVED_KEYWORD		3
+
+
 typedef struct ScanKeyword
 {
-	const char *name;
-	int			value;
+	const char *name;			/* in lower case */
+	int16		value;			/* grammar's token code */
+	int16		category;		/* see codes above */
 } ScanKeyword;
 
 extern const ScanKeyword *ScanKeywordLookup(const char *text);
diff --git a/src/test/regress/expected/prepare.out b/src/test/regress/expected/prepare.out
index 626b951bc310bb8be9255e5d7260f56e5c44b66f..35e1befcbb49998f803d72d14fb3ed2e0916fc19 100644
--- a/src/test/regress/expected/prepare.out
+++ b/src/test/regress/expected/prepare.out
@@ -164,7 +164,7 @@ SELECT name, statement, parameter_types FROM pg_prepared_statements
  q5   | PREPARE q5(int, text) AS                                        | {integer,text}
       : \x09SELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2       
       : \x09ORDER BY unique1;                                             
- q6   | PREPARE q6 AS                                                   | {integer,"\"name\""}
+ q6   | PREPARE q6 AS                                                   | {integer,name}
       :     SELECT * FROM tenk1 WHERE unique1 = $1 AND stringu1 = $2;     
  q7   | PREPARE q7(unknown) AS                                          | {path}
       :     SELECT * FROM road WHERE thepath = $1;                        
diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out
index e1098fd68456d5da100b2e674fd19c26cccbdb4c..00e60aad4cc501fdcf66a163e784a166615acf10 100644
--- a/src/test/regress/expected/rules.out
+++ b/src/test/regress/expected/rules.out
@@ -1278,39 +1278,39 @@ drop table cchild;
 SELECT viewname, definition FROM pg_views WHERE schemaname <> 'information_schema' ORDER BY viewname;
          viewname         |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               definition                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
 --------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- iexit                    | SELECT ih."name", ih.thepath, interpt_pp(ih.thepath, r.thepath) AS exit FROM ihighway ih, ramp r WHERE (ih.thepath ## r.thepath);
- pg_cursors               | SELECT c."name", c."statement", c.is_holdable, c.is_binary, c.is_scrollable, c.creation_time FROM pg_cursor() c("name" text, "statement" text, is_holdable boolean, is_binary boolean, is_scrollable boolean, creation_time timestamp with time zone);
+ iexit                    | SELECT ih.name, ih.thepath, interpt_pp(ih.thepath, r.thepath) AS exit FROM ihighway ih, ramp r WHERE (ih.thepath ## r.thepath);
+ pg_cursors               | SELECT c.name, c.statement, c.is_holdable, c.is_binary, c.is_scrollable, c.creation_time FROM pg_cursor() c(name text, statement text, is_holdable boolean, is_binary boolean, is_scrollable boolean, creation_time timestamp with time zone);
  pg_group                 | SELECT pg_authid.rolname AS groname, pg_authid.oid AS grosysid, ARRAY(SELECT pg_auth_members.member FROM pg_auth_members WHERE (pg_auth_members.roleid = pg_authid.oid)) AS grolist FROM pg_authid WHERE (NOT pg_authid.rolcanlogin);
- pg_indexes               | SELECT n.nspname AS schemaname, c.relname AS tablename, i.relname AS indexname, t.spcname AS "tablespace", pg_get_indexdef(i.oid) AS indexdef FROM ((((pg_index x JOIN pg_class c ON ((c.oid = x.indrelid))) JOIN pg_class i ON ((i.oid = x.indexrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) LEFT JOIN pg_tablespace t ON ((t.oid = i.reltablespace))) WHERE ((c.relkind = 'r'::"char") AND (i.relkind = 'i'::"char"));
- pg_locks                 | SELECT l.locktype, l."database", l.relation, l.page, l.tuple, l.transactionid, l.classid, l.objid, l.objsubid, l."transaction", l.pid, l."mode", l."granted" FROM pg_lock_status() l(locktype text, "database" oid, relation oid, page integer, tuple smallint, transactionid xid, classid oid, objid oid, objsubid smallint, "transaction" xid, pid integer, "mode" text, "granted" boolean);
- pg_prepared_statements   | SELECT p."name", p."statement", p.prepare_time, p.parameter_types, p.from_sql FROM pg_prepared_statement() p("name" text, "statement" text, prepare_time timestamp with time zone, parameter_types regtype[], from_sql boolean);
- pg_prepared_xacts        | SELECT p."transaction", p.gid, p."prepared", u.rolname AS "owner", d.datname AS "database" FROM ((pg_prepared_xact() p("transaction" xid, gid text, "prepared" timestamp with time zone, ownerid oid, dbid oid) LEFT JOIN pg_authid u ON ((p.ownerid = u.oid))) LEFT JOIN pg_database d ON ((p.dbid = d.oid)));
+ pg_indexes               | SELECT n.nspname AS schemaname, c.relname AS tablename, i.relname AS indexname, t.spcname AS tablespace, pg_get_indexdef(i.oid) AS indexdef FROM ((((pg_index x JOIN pg_class c ON ((c.oid = x.indrelid))) JOIN pg_class i ON ((i.oid = x.indexrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) LEFT JOIN pg_tablespace t ON ((t.oid = i.reltablespace))) WHERE ((c.relkind = 'r'::"char") AND (i.relkind = 'i'::"char"));
+ pg_locks                 | SELECT l.locktype, l.database, l.relation, l.page, l.tuple, l.transactionid, l.classid, l.objid, l.objsubid, l.transaction, l.pid, l.mode, l.granted FROM pg_lock_status() l(locktype text, database oid, relation oid, page integer, tuple smallint, transactionid xid, classid oid, objid oid, objsubid smallint, transaction xid, pid integer, mode text, granted boolean);
+ pg_prepared_statements   | SELECT p.name, p.statement, p.prepare_time, p.parameter_types, p.from_sql FROM pg_prepared_statement() p(name text, statement text, prepare_time timestamp with time zone, parameter_types regtype[], from_sql boolean);
+ pg_prepared_xacts        | SELECT p.transaction, p.gid, p.prepared, u.rolname AS owner, d.datname AS database FROM ((pg_prepared_xact() p(transaction xid, gid text, prepared timestamp with time zone, ownerid oid, dbid oid) LEFT JOIN pg_authid u ON ((p.ownerid = u.oid))) LEFT JOIN pg_database d ON ((p.dbid = d.oid)));
  pg_roles                 | SELECT pg_authid.rolname, pg_authid.rolsuper, pg_authid.rolinherit, pg_authid.rolcreaterole, pg_authid.rolcreatedb, pg_authid.rolcatupdate, pg_authid.rolcanlogin, pg_authid.rolconnlimit, '********'::text AS rolpassword, pg_authid.rolvaliduntil, pg_authid.rolconfig, pg_authid.oid FROM pg_authid;
- pg_rules                 | SELECT n.nspname AS schemaname, c.relname AS tablename, r.rulename, pg_get_ruledef(r.oid) AS definition FROM ((pg_rewrite r JOIN pg_class c ON ((c.oid = r.ev_class))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (r.rulename <> '_RETURN'::"name");
- pg_settings              | SELECT a."name", a.setting, a.unit, a.category, a.short_desc, a.extra_desc, a.context, a.vartype, a.source, a.min_val, a.max_val FROM pg_show_all_settings() a("name" text, setting text, unit text, category text, short_desc text, extra_desc text, context text, vartype text, source text, min_val text, max_val text);
+ pg_rules                 | SELECT n.nspname AS schemaname, c.relname AS tablename, r.rulename, pg_get_ruledef(r.oid) AS definition FROM ((pg_rewrite r JOIN pg_class c ON ((c.oid = r.ev_class))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (r.rulename <> '_RETURN'::name);
+ pg_settings              | SELECT a.name, a.setting, a.unit, a.category, a.short_desc, a.extra_desc, a.context, a.vartype, a.source, a.min_val, a.max_val FROM pg_show_all_settings() a(name text, setting text, unit text, category text, short_desc text, extra_desc text, context text, vartype text, source text, min_val text, max_val text);
  pg_shadow                | SELECT pg_authid.rolname AS usename, pg_authid.oid AS usesysid, pg_authid.rolcreatedb AS usecreatedb, pg_authid.rolsuper AS usesuper, pg_authid.rolcatupdate AS usecatupd, pg_authid.rolpassword AS passwd, (pg_authid.rolvaliduntil)::abstime AS valuntil, pg_authid.rolconfig AS useconfig FROM pg_authid WHERE pg_authid.rolcanlogin;
  pg_stat_activity         | SELECT d.oid AS datid, d.datname, pg_stat_get_backend_pid(s.backendid) AS procpid, pg_stat_get_backend_userid(s.backendid) AS usesysid, u.rolname AS usename, pg_stat_get_backend_activity(s.backendid) AS current_query, pg_stat_get_backend_waiting(s.backendid) AS waiting, pg_stat_get_backend_txn_start(s.backendid) AS txn_start, pg_stat_get_backend_activity_start(s.backendid) AS query_start, pg_stat_get_backend_start(s.backendid) AS backend_start, pg_stat_get_backend_client_addr(s.backendid) AS client_addr, pg_stat_get_backend_client_port(s.backendid) AS client_port FROM pg_database d, (SELECT pg_stat_get_backend_idset() AS backendid) s, pg_authid u WHERE ((pg_stat_get_backend_dbid(s.backendid) = d.oid) AND (pg_stat_get_backend_userid(s.backendid) = u.oid));
  pg_stat_all_indexes      | SELECT c.oid AS relid, i.oid AS indexrelid, n.nspname AS schemaname, c.relname, i.relname AS indexrelname, pg_stat_get_numscans(i.oid) AS idx_scan, pg_stat_get_tuples_returned(i.oid) AS idx_tup_read, pg_stat_get_tuples_fetched(i.oid) AS idx_tup_fetch FROM (((pg_class c JOIN pg_index x ON ((c.oid = x.indrelid))) JOIN pg_class i ON ((i.oid = x.indexrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char"]));
  pg_stat_all_tables       | SELECT c.oid AS relid, n.nspname AS schemaname, c.relname, pg_stat_get_numscans(c.oid) AS seq_scan, pg_stat_get_tuples_returned(c.oid) AS seq_tup_read, (sum(pg_stat_get_numscans(i.indexrelid)))::bigint AS idx_scan, ((sum(pg_stat_get_tuples_fetched(i.indexrelid)))::bigint + pg_stat_get_tuples_fetched(c.oid)) AS idx_tup_fetch, pg_stat_get_tuples_inserted(c.oid) AS n_tup_ins, pg_stat_get_tuples_updated(c.oid) AS n_tup_upd, pg_stat_get_tuples_deleted(c.oid) AS n_tup_del, pg_stat_get_live_tuples(c.oid) AS n_live_tup, pg_stat_get_dead_tuples(c.oid) AS n_dead_tup, pg_stat_get_last_vacuum_time(c.oid) AS last_vacuum, pg_stat_get_last_autovacuum_time(c.oid) AS last_autovacuum, pg_stat_get_last_analyze_time(c.oid) AS last_analyze, pg_stat_get_last_autoanalyze_time(c.oid) AS last_autoanalyze FROM ((pg_class c LEFT JOIN pg_index i ON ((c.oid = i.indrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char"])) GROUP BY c.oid, n.nspname, c.relname;
  pg_stat_bgwriter         | SELECT pg_stat_get_bgwriter_timed_checkpoints() AS checkpoints_timed, pg_stat_get_bgwriter_requested_checkpoints() AS checkpoints_req, pg_stat_get_bgwriter_buf_written_checkpoints() AS buffers_checkpoint, pg_stat_get_bgwriter_buf_written_lru() AS buffers_lru, pg_stat_get_bgwriter_buf_written_all() AS buffers_all, pg_stat_get_bgwriter_maxwritten_lru() AS maxwritten_lru, pg_stat_get_bgwriter_maxwritten_all() AS maxwritten_all;
  pg_stat_database         | SELECT d.oid AS datid, d.datname, pg_stat_get_db_numbackends(d.oid) AS numbackends, pg_stat_get_db_xact_commit(d.oid) AS xact_commit, pg_stat_get_db_xact_rollback(d.oid) AS xact_rollback, (pg_stat_get_db_blocks_fetched(d.oid) - pg_stat_get_db_blocks_hit(d.oid)) AS blks_read, pg_stat_get_db_blocks_hit(d.oid) AS blks_hit, pg_stat_get_db_tuples_returned(d.oid) AS tup_returned, pg_stat_get_db_tuples_fetched(d.oid) AS tup_fetched, pg_stat_get_db_tuples_inserted(d.oid) AS tup_inserted, pg_stat_get_db_tuples_updated(d.oid) AS tup_updated, pg_stat_get_db_tuples_deleted(d.oid) AS tup_deleted FROM pg_database d;
- pg_stat_sys_indexes      | SELECT pg_stat_all_indexes.relid, pg_stat_all_indexes.indexrelid, pg_stat_all_indexes.schemaname, pg_stat_all_indexes.relname, pg_stat_all_indexes.indexrelname, pg_stat_all_indexes.idx_scan, pg_stat_all_indexes.idx_tup_read, pg_stat_all_indexes.idx_tup_fetch FROM pg_stat_all_indexes WHERE (pg_stat_all_indexes.schemaname = ANY (ARRAY['pg_catalog'::"name", 'pg_toast'::"name", 'information_schema'::"name"]));
- pg_stat_sys_tables       | SELECT pg_stat_all_tables.relid, pg_stat_all_tables.schemaname, pg_stat_all_tables.relname, pg_stat_all_tables.seq_scan, pg_stat_all_tables.seq_tup_read, pg_stat_all_tables.idx_scan, pg_stat_all_tables.idx_tup_fetch, pg_stat_all_tables.n_tup_ins, pg_stat_all_tables.n_tup_upd, pg_stat_all_tables.n_tup_del, pg_stat_all_tables.n_live_tup, pg_stat_all_tables.n_dead_tup, pg_stat_all_tables.last_vacuum, pg_stat_all_tables.last_autovacuum, pg_stat_all_tables.last_analyze, pg_stat_all_tables.last_autoanalyze FROM pg_stat_all_tables WHERE (pg_stat_all_tables.schemaname = ANY (ARRAY['pg_catalog'::"name", 'pg_toast'::"name", 'information_schema'::"name"]));
- pg_stat_user_indexes     | SELECT pg_stat_all_indexes.relid, pg_stat_all_indexes.indexrelid, pg_stat_all_indexes.schemaname, pg_stat_all_indexes.relname, pg_stat_all_indexes.indexrelname, pg_stat_all_indexes.idx_scan, pg_stat_all_indexes.idx_tup_read, pg_stat_all_indexes.idx_tup_fetch FROM pg_stat_all_indexes WHERE (pg_stat_all_indexes.schemaname <> ALL (ARRAY['pg_catalog'::"name", 'pg_toast'::"name", 'information_schema'::"name"]));
- pg_stat_user_tables      | SELECT pg_stat_all_tables.relid, pg_stat_all_tables.schemaname, pg_stat_all_tables.relname, pg_stat_all_tables.seq_scan, pg_stat_all_tables.seq_tup_read, pg_stat_all_tables.idx_scan, pg_stat_all_tables.idx_tup_fetch, pg_stat_all_tables.n_tup_ins, pg_stat_all_tables.n_tup_upd, pg_stat_all_tables.n_tup_del, pg_stat_all_tables.n_live_tup, pg_stat_all_tables.n_dead_tup, pg_stat_all_tables.last_vacuum, pg_stat_all_tables.last_autovacuum, pg_stat_all_tables.last_analyze, pg_stat_all_tables.last_autoanalyze FROM pg_stat_all_tables WHERE (pg_stat_all_tables.schemaname <> ALL (ARRAY['pg_catalog'::"name", 'pg_toast'::"name", 'information_schema'::"name"]));
+ pg_stat_sys_indexes      | SELECT pg_stat_all_indexes.relid, pg_stat_all_indexes.indexrelid, pg_stat_all_indexes.schemaname, pg_stat_all_indexes.relname, pg_stat_all_indexes.indexrelname, pg_stat_all_indexes.idx_scan, pg_stat_all_indexes.idx_tup_read, pg_stat_all_indexes.idx_tup_fetch FROM pg_stat_all_indexes WHERE (pg_stat_all_indexes.schemaname = ANY (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
+ pg_stat_sys_tables       | SELECT pg_stat_all_tables.relid, pg_stat_all_tables.schemaname, pg_stat_all_tables.relname, pg_stat_all_tables.seq_scan, pg_stat_all_tables.seq_tup_read, pg_stat_all_tables.idx_scan, pg_stat_all_tables.idx_tup_fetch, pg_stat_all_tables.n_tup_ins, pg_stat_all_tables.n_tup_upd, pg_stat_all_tables.n_tup_del, pg_stat_all_tables.n_live_tup, pg_stat_all_tables.n_dead_tup, pg_stat_all_tables.last_vacuum, pg_stat_all_tables.last_autovacuum, pg_stat_all_tables.last_analyze, pg_stat_all_tables.last_autoanalyze FROM pg_stat_all_tables WHERE (pg_stat_all_tables.schemaname = ANY (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
+ pg_stat_user_indexes     | SELECT pg_stat_all_indexes.relid, pg_stat_all_indexes.indexrelid, pg_stat_all_indexes.schemaname, pg_stat_all_indexes.relname, pg_stat_all_indexes.indexrelname, pg_stat_all_indexes.idx_scan, pg_stat_all_indexes.idx_tup_read, pg_stat_all_indexes.idx_tup_fetch FROM pg_stat_all_indexes WHERE (pg_stat_all_indexes.schemaname <> ALL (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
+ pg_stat_user_tables      | SELECT pg_stat_all_tables.relid, pg_stat_all_tables.schemaname, pg_stat_all_tables.relname, pg_stat_all_tables.seq_scan, pg_stat_all_tables.seq_tup_read, pg_stat_all_tables.idx_scan, pg_stat_all_tables.idx_tup_fetch, pg_stat_all_tables.n_tup_ins, pg_stat_all_tables.n_tup_upd, pg_stat_all_tables.n_tup_del, pg_stat_all_tables.n_live_tup, pg_stat_all_tables.n_dead_tup, pg_stat_all_tables.last_vacuum, pg_stat_all_tables.last_autovacuum, pg_stat_all_tables.last_analyze, pg_stat_all_tables.last_autoanalyze FROM pg_stat_all_tables WHERE (pg_stat_all_tables.schemaname <> ALL (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
  pg_statio_all_indexes    | SELECT c.oid AS relid, i.oid AS indexrelid, n.nspname AS schemaname, c.relname, i.relname AS indexrelname, (pg_stat_get_blocks_fetched(i.oid) - pg_stat_get_blocks_hit(i.oid)) AS idx_blks_read, pg_stat_get_blocks_hit(i.oid) AS idx_blks_hit FROM (((pg_class c JOIN pg_index x ON ((c.oid = x.indrelid))) JOIN pg_class i ON ((i.oid = x.indexrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char"]));
  pg_statio_all_sequences  | SELECT c.oid AS relid, n.nspname AS schemaname, c.relname, (pg_stat_get_blocks_fetched(c.oid) - pg_stat_get_blocks_hit(c.oid)) AS blks_read, pg_stat_get_blocks_hit(c.oid) AS blks_hit FROM (pg_class c LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = 'S'::"char");
  pg_statio_all_tables     | SELECT c.oid AS relid, n.nspname AS schemaname, c.relname, (pg_stat_get_blocks_fetched(c.oid) - pg_stat_get_blocks_hit(c.oid)) AS heap_blks_read, pg_stat_get_blocks_hit(c.oid) AS heap_blks_hit, (sum((pg_stat_get_blocks_fetched(i.indexrelid) - pg_stat_get_blocks_hit(i.indexrelid))))::bigint AS idx_blks_read, (sum(pg_stat_get_blocks_hit(i.indexrelid)))::bigint AS idx_blks_hit, (pg_stat_get_blocks_fetched(t.oid) - pg_stat_get_blocks_hit(t.oid)) AS toast_blks_read, pg_stat_get_blocks_hit(t.oid) AS toast_blks_hit, (pg_stat_get_blocks_fetched(x.oid) - pg_stat_get_blocks_hit(x.oid)) AS tidx_blks_read, pg_stat_get_blocks_hit(x.oid) AS tidx_blks_hit FROM ((((pg_class c LEFT JOIN pg_index i ON ((c.oid = i.indrelid))) LEFT JOIN pg_class t ON ((c.reltoastrelid = t.oid))) LEFT JOIN pg_class x ON ((t.reltoastidxid = x.oid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char"])) GROUP BY c.oid, n.nspname, c.relname, t.oid, x.oid;
- pg_statio_sys_indexes    | SELECT pg_statio_all_indexes.relid, pg_statio_all_indexes.indexrelid, pg_statio_all_indexes.schemaname, pg_statio_all_indexes.relname, pg_statio_all_indexes.indexrelname, pg_statio_all_indexes.idx_blks_read, pg_statio_all_indexes.idx_blks_hit FROM pg_statio_all_indexes WHERE (pg_statio_all_indexes.schemaname = ANY (ARRAY['pg_catalog'::"name", 'pg_toast'::"name", 'information_schema'::"name"]));
- pg_statio_sys_sequences  | SELECT pg_statio_all_sequences.relid, pg_statio_all_sequences.schemaname, pg_statio_all_sequences.relname, pg_statio_all_sequences.blks_read, pg_statio_all_sequences.blks_hit FROM pg_statio_all_sequences WHERE (pg_statio_all_sequences.schemaname = ANY (ARRAY['pg_catalog'::"name", 'pg_toast'::"name", 'information_schema'::"name"]));
- pg_statio_sys_tables     | SELECT pg_statio_all_tables.relid, pg_statio_all_tables.schemaname, pg_statio_all_tables.relname, pg_statio_all_tables.heap_blks_read, pg_statio_all_tables.heap_blks_hit, pg_statio_all_tables.idx_blks_read, pg_statio_all_tables.idx_blks_hit, pg_statio_all_tables.toast_blks_read, pg_statio_all_tables.toast_blks_hit, pg_statio_all_tables.tidx_blks_read, pg_statio_all_tables.tidx_blks_hit FROM pg_statio_all_tables WHERE (pg_statio_all_tables.schemaname = ANY (ARRAY['pg_catalog'::"name", 'pg_toast'::"name", 'information_schema'::"name"]));
- pg_statio_user_indexes   | SELECT pg_statio_all_indexes.relid, pg_statio_all_indexes.indexrelid, pg_statio_all_indexes.schemaname, pg_statio_all_indexes.relname, pg_statio_all_indexes.indexrelname, pg_statio_all_indexes.idx_blks_read, pg_statio_all_indexes.idx_blks_hit FROM pg_statio_all_indexes WHERE (pg_statio_all_indexes.schemaname <> ALL (ARRAY['pg_catalog'::"name", 'pg_toast'::"name", 'information_schema'::"name"]));
- pg_statio_user_sequences | SELECT pg_statio_all_sequences.relid, pg_statio_all_sequences.schemaname, pg_statio_all_sequences.relname, pg_statio_all_sequences.blks_read, pg_statio_all_sequences.blks_hit FROM pg_statio_all_sequences WHERE (pg_statio_all_sequences.schemaname <> ALL (ARRAY['pg_catalog'::"name", 'pg_toast'::"name", 'information_schema'::"name"]));
- pg_statio_user_tables    | SELECT pg_statio_all_tables.relid, pg_statio_all_tables.schemaname, pg_statio_all_tables.relname, pg_statio_all_tables.heap_blks_read, pg_statio_all_tables.heap_blks_hit, pg_statio_all_tables.idx_blks_read, pg_statio_all_tables.idx_blks_hit, pg_statio_all_tables.toast_blks_read, pg_statio_all_tables.toast_blks_hit, pg_statio_all_tables.tidx_blks_read, pg_statio_all_tables.tidx_blks_hit FROM pg_statio_all_tables WHERE (pg_statio_all_tables.schemaname <> ALL (ARRAY['pg_catalog'::"name", 'pg_toast'::"name", 'information_schema'::"name"]));
+ pg_statio_sys_indexes    | SELECT pg_statio_all_indexes.relid, pg_statio_all_indexes.indexrelid, pg_statio_all_indexes.schemaname, pg_statio_all_indexes.relname, pg_statio_all_indexes.indexrelname, pg_statio_all_indexes.idx_blks_read, pg_statio_all_indexes.idx_blks_hit FROM pg_statio_all_indexes WHERE (pg_statio_all_indexes.schemaname = ANY (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
+ pg_statio_sys_sequences  | SELECT pg_statio_all_sequences.relid, pg_statio_all_sequences.schemaname, pg_statio_all_sequences.relname, pg_statio_all_sequences.blks_read, pg_statio_all_sequences.blks_hit FROM pg_statio_all_sequences WHERE (pg_statio_all_sequences.schemaname = ANY (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
+ pg_statio_sys_tables     | SELECT pg_statio_all_tables.relid, pg_statio_all_tables.schemaname, pg_statio_all_tables.relname, pg_statio_all_tables.heap_blks_read, pg_statio_all_tables.heap_blks_hit, pg_statio_all_tables.idx_blks_read, pg_statio_all_tables.idx_blks_hit, pg_statio_all_tables.toast_blks_read, pg_statio_all_tables.toast_blks_hit, pg_statio_all_tables.tidx_blks_read, pg_statio_all_tables.tidx_blks_hit FROM pg_statio_all_tables WHERE (pg_statio_all_tables.schemaname = ANY (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
+ pg_statio_user_indexes   | SELECT pg_statio_all_indexes.relid, pg_statio_all_indexes.indexrelid, pg_statio_all_indexes.schemaname, pg_statio_all_indexes.relname, pg_statio_all_indexes.indexrelname, pg_statio_all_indexes.idx_blks_read, pg_statio_all_indexes.idx_blks_hit FROM pg_statio_all_indexes WHERE (pg_statio_all_indexes.schemaname <> ALL (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
+ pg_statio_user_sequences | SELECT pg_statio_all_sequences.relid, pg_statio_all_sequences.schemaname, pg_statio_all_sequences.relname, pg_statio_all_sequences.blks_read, pg_statio_all_sequences.blks_hit FROM pg_statio_all_sequences WHERE (pg_statio_all_sequences.schemaname <> ALL (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
+ pg_statio_user_tables    | SELECT pg_statio_all_tables.relid, pg_statio_all_tables.schemaname, pg_statio_all_tables.relname, pg_statio_all_tables.heap_blks_read, pg_statio_all_tables.heap_blks_hit, pg_statio_all_tables.idx_blks_read, pg_statio_all_tables.idx_blks_hit, pg_statio_all_tables.toast_blks_read, pg_statio_all_tables.toast_blks_hit, pg_statio_all_tables.tidx_blks_read, pg_statio_all_tables.tidx_blks_hit FROM pg_statio_all_tables WHERE (pg_statio_all_tables.schemaname <> ALL (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
  pg_stats                 | SELECT n.nspname AS schemaname, c.relname AS tablename, a.attname, s.stanullfrac AS null_frac, s.stawidth AS avg_width, s.stadistinct AS n_distinct, CASE 1 WHEN s.stakind1 THEN s.stavalues1 WHEN s.stakind2 THEN s.stavalues2 WHEN s.stakind3 THEN s.stavalues3 WHEN s.stakind4 THEN s.stavalues4 ELSE NULL::anyarray END AS most_common_vals, CASE 1 WHEN s.stakind1 THEN s.stanumbers1 WHEN s.stakind2 THEN s.stanumbers2 WHEN s.stakind3 THEN s.stanumbers3 WHEN s.stakind4 THEN s.stanumbers4 ELSE NULL::real[] END AS most_common_freqs, CASE 2 WHEN s.stakind1 THEN s.stavalues1 WHEN s.stakind2 THEN s.stavalues2 WHEN s.stakind3 THEN s.stavalues3 WHEN s.stakind4 THEN s.stavalues4 ELSE NULL::anyarray END AS histogram_bounds, CASE 3 WHEN s.stakind1 THEN s.stanumbers1[1] WHEN s.stakind2 THEN s.stanumbers2[1] WHEN s.stakind3 THEN s.stanumbers3[1] WHEN s.stakind4 THEN s.stanumbers4[1] ELSE NULL::real END AS correlation FROM (((pg_statistic s JOIN pg_class c ON ((c.oid = s.starelid))) JOIN pg_attribute a ON (((c.oid = a.attrelid) AND (a.attnum = s.staattnum)))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE has_table_privilege(c.oid, 'select'::text);
- pg_tables                | SELECT n.nspname AS schemaname, c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, t.spcname AS "tablespace", c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM ((pg_class c LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) LEFT JOIN pg_tablespace t ON ((t.oid = c.reltablespace))) WHERE (c.relkind = 'r'::"char");
+ pg_tables                | SELECT n.nspname AS schemaname, c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, t.spcname AS tablespace, c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM ((pg_class c LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) LEFT JOIN pg_tablespace t ON ((t.oid = c.reltablespace))) WHERE (c.relkind = 'r'::"char");
  pg_timezone_abbrevs      | SELECT pg_timezone_abbrevs.abbrev, pg_timezone_abbrevs.utc_offset, pg_timezone_abbrevs.is_dst FROM pg_timezone_abbrevs() pg_timezone_abbrevs(abbrev, utc_offset, is_dst);
- pg_timezone_names        | SELECT pg_timezone_names."name", pg_timezone_names.abbrev, pg_timezone_names.utc_offset, pg_timezone_names.is_dst FROM pg_timezone_names() pg_timezone_names("name", abbrev, utc_offset, is_dst);
+ pg_timezone_names        | SELECT pg_timezone_names.name, pg_timezone_names.abbrev, pg_timezone_names.utc_offset, pg_timezone_names.is_dst FROM pg_timezone_names() pg_timezone_names(name, abbrev, utc_offset, is_dst);
  pg_user                  | SELECT pg_shadow.usename, pg_shadow.usesysid, pg_shadow.usecreatedb, pg_shadow.usesuper, pg_shadow.usecatupd, '********'::text AS passwd, pg_shadow.valuntil, pg_shadow.useconfig FROM pg_shadow;
  pg_views                 | SELECT n.nspname AS schemaname, c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, pg_get_viewdef(c.oid) AS definition FROM (pg_class c LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = 'v'::"char");
  rtest_v1                 | SELECT rtest_t1.a, rtest_t1.b FROM rtest_t1;
@@ -1325,19 +1325,19 @@ SELECT viewname, definition FROM pg_views WHERE schemaname <> 'information_schem
  shoelace                 | SELECT s.sl_name, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, (s.sl_len * u.un_fact) AS sl_len_cm FROM shoelace_data s, unit u WHERE (s.sl_unit = u.un_name);
  shoelace_candelete       | SELECT shoelace_obsolete.sl_name, shoelace_obsolete.sl_avail, shoelace_obsolete.sl_color, shoelace_obsolete.sl_len, shoelace_obsolete.sl_unit, shoelace_obsolete.sl_len_cm FROM shoelace_obsolete WHERE (shoelace_obsolete.sl_avail = 0);
  shoelace_obsolete        | SELECT shoelace.sl_name, shoelace.sl_avail, shoelace.sl_color, shoelace.sl_len, shoelace.sl_unit, shoelace.sl_len_cm FROM shoelace WHERE (NOT (EXISTS (SELECT shoe.shoename FROM shoe WHERE (shoe.slcolor = shoelace.sl_color))));
- street                   | SELECT r."name", r.thepath, c.cname FROM ONLY road r, real_city c WHERE (c.outline ## r.thepath);
- toyemp                   | SELECT emp."name", emp.age, emp."location", (12 * emp.salary) AS annualsal FROM emp;
+ street                   | SELECT r.name, r.thepath, c.cname FROM ONLY road r, real_city c WHERE (c.outline ## r.thepath);
+ toyemp                   | SELECT emp.name, emp.age, emp.location, (12 * emp.salary) AS annualsal FROM emp;
 (49 rows)
 
 SELECT tablename, rulename, definition FROM pg_rules 
 	ORDER BY tablename, rulename;
-   tablename   |    rulename     |                                                                                                                                   definition                                                                                                                                    
----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+   tablename   |    rulename     |                                                                                                                                  definition                                                                                                                                   
+---------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  pg_settings   | pg_settings_n   | CREATE RULE pg_settings_n AS ON UPDATE TO pg_settings DO INSTEAD NOTHING;
- pg_settings   | pg_settings_u   | CREATE RULE pg_settings_u AS ON UPDATE TO pg_settings WHERE (new."name" = old."name") DO SELECT set_config(old."name", new.setting, false) AS set_config;
- rtest_emp     | rtest_emp_del   | CREATE RULE rtest_emp_del AS ON DELETE TO rtest_emp DO INSERT INTO rtest_emplog (ename, who, "action", newsal, oldsal) VALUES (old.ename, "current_user"(), 'fired'::bpchar, '$0.00'::money, old.salary);
- rtest_emp     | rtest_emp_ins   | CREATE RULE rtest_emp_ins AS ON INSERT TO rtest_emp DO INSERT INTO rtest_emplog (ename, who, "action", newsal, oldsal) VALUES (new.ename, "current_user"(), 'hired'::bpchar, new.salary, '$0.00'::money);
- rtest_emp     | rtest_emp_upd   | CREATE RULE rtest_emp_upd AS ON UPDATE TO rtest_emp WHERE (new.salary <> old.salary) DO INSERT INTO rtest_emplog (ename, who, "action", newsal, oldsal) VALUES (new.ename, "current_user"(), 'honored'::bpchar, new.salary, old.salary);
+ pg_settings   | pg_settings_u   | CREATE RULE pg_settings_u AS ON UPDATE TO pg_settings WHERE (new.name = old.name) DO SELECT set_config(old.name, new.setting, false) AS set_config;
+ rtest_emp     | rtest_emp_del   | CREATE RULE rtest_emp_del AS ON DELETE TO rtest_emp DO INSERT INTO rtest_emplog (ename, who, action, newsal, oldsal) VALUES (old.ename, "current_user"(), 'fired'::bpchar, '$0.00'::money, old.salary);
+ rtest_emp     | rtest_emp_ins   | CREATE RULE rtest_emp_ins AS ON INSERT TO rtest_emp DO INSERT INTO rtest_emplog (ename, who, action, newsal, oldsal) VALUES (new.ename, "current_user"(), 'hired'::bpchar, new.salary, '$0.00'::money);
+ rtest_emp     | rtest_emp_upd   | CREATE RULE rtest_emp_upd AS ON UPDATE TO rtest_emp WHERE (new.salary <> old.salary) DO INSERT INTO rtest_emplog (ename, who, action, newsal, oldsal) VALUES (new.ename, "current_user"(), 'honored'::bpchar, new.salary, old.salary);
  rtest_nothn1  | rtest_nothn_r1  | CREATE RULE rtest_nothn_r1 AS ON INSERT TO rtest_nothn1 WHERE ((new.a >= 10) AND (new.a < 20)) DO INSTEAD NOTHING;
  rtest_nothn1  | rtest_nothn_r2  | CREATE RULE rtest_nothn_r2 AS ON INSERT TO rtest_nothn1 WHERE ((new.a >= 30) AND (new.a < 40)) DO INSTEAD NOTHING;
  rtest_nothn2  | rtest_nothn_r3  | CREATE RULE rtest_nothn_r3 AS ON INSERT TO rtest_nothn2 WHERE (new.a >= 100) DO INSTEAD INSERT INTO rtest_nothn3 (a, b) VALUES (new.a, new.b);
@@ -1360,7 +1360,7 @@ SELECT tablename, rulename, definition FROM pg_rules
  shoelace      | shoelace_del    | CREATE RULE shoelace_del AS ON DELETE TO shoelace DO INSTEAD DELETE FROM shoelace_data WHERE (shoelace_data.sl_name = old.sl_name);
  shoelace      | shoelace_ins    | CREATE RULE shoelace_ins AS ON INSERT TO shoelace DO INSTEAD INSERT INTO shoelace_data (sl_name, sl_avail, sl_color, sl_len, sl_unit) VALUES (new.sl_name, new.sl_avail, new.sl_color, new.sl_len, new.sl_unit);
  shoelace      | shoelace_upd    | CREATE RULE shoelace_upd AS ON UPDATE TO shoelace DO INSTEAD UPDATE shoelace_data SET sl_name = new.sl_name, sl_avail = new.sl_avail, sl_color = new.sl_color, sl_len = new.sl_len, sl_unit = new.sl_unit WHERE (shoelace_data.sl_name = old.sl_name);
- shoelace_data | log_shoelace    | CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data WHERE (new.sl_avail <> old.sl_avail) DO INSERT INTO shoelace_log (sl_name, sl_avail, log_who, log_when) VALUES (new.sl_name, new.sl_avail, 'Al Bundy'::"name", 'Thu Jan 01 00:00:00 1970'::timestamp without time zone);
+ shoelace_data | log_shoelace    | CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data WHERE (new.sl_avail <> old.sl_avail) DO INSERT INTO shoelace_log (sl_name, sl_avail, log_who, log_when) VALUES (new.sl_name, new.sl_avail, 'Al Bundy'::name, 'Thu Jan 01 00:00:00 1970'::timestamp without time zone);
  shoelace_ok   | shoelace_ok_ins | CREATE RULE shoelace_ok_ins AS ON INSERT TO shoelace_ok DO INSTEAD UPDATE shoelace SET sl_avail = (shoelace.sl_avail + new.ok_quant) WHERE (shoelace.sl_name = new.ok_name);
 (29 rows)
 
diff --git a/src/test/regress/expected/xml.out b/src/test/regress/expected/xml.out
index cec9ea294420bb1506aedd4e287096246dd47959..8ffde1dc6af7c9b912a659b1064b300f51551866 100644
--- a/src/test/regress/expected/xml.out
+++ b/src/test/regress/expected/xml.out
@@ -53,7 +53,7 @@ SELECT xmlconcat('hello', 'you');
 (1 row)
 
 SELECT xmlconcat(1, 2);
-ERROR:  argument of XMLCONCAT must be type "xml", not type integer
+ERROR:  argument of XMLCONCAT must be type xml, not type integer
 SELECT xmlconcat('bad', '<syntax');
 ERROR:  invalid XML content
 DETAIL:  Entity: line 1: parser error : Couldn't find end of Start Tag syntax line 1
@@ -388,17 +388,17 @@ CREATE VIEW xmlview8 AS SELECT xmlserialize(content 'good' as char(10));
 CREATE VIEW xmlview9 AS SELECT xmlserialize(content 'good' as text);
 SELECT table_name, view_definition FROM information_schema.views
   WHERE table_name LIKE 'xmlview%' ORDER BY 1;
- table_name |                                                        view_definition                                                         
-------------+--------------------------------------------------------------------------------------------------------------------------------
+ table_name |                                                      view_definition                                                       
+------------+----------------------------------------------------------------------------------------------------------------------------
  xmlview1   | SELECT xmlcomment('test'::text) AS xmlcomment;
- xmlview2   | SELECT XMLCONCAT('hello'::"xml", 'you'::"xml") AS "xmlconcat";
+ xmlview2   | SELECT XMLCONCAT('hello'::xml, 'you'::xml) AS "xmlconcat";
  xmlview3   | SELECT XMLELEMENT(NAME element, XMLATTRIBUTES(1 AS ":one:", 'deuce' AS two), 'content&') AS "xmlelement";
- xmlview4   | SELECT XMLELEMENT(NAME employee, XMLFOREST(emp."name" AS "name", emp.age AS age, emp.salary AS pay)) AS "xmlelement" FROM emp;
+ xmlview4   | SELECT XMLELEMENT(NAME employee, XMLFOREST(emp.name AS name, emp.age AS age, emp.salary AS pay)) AS "xmlelement" FROM emp;
  xmlview5   | SELECT XMLPARSE(CONTENT '<abc>x</abc>'::text STRIP WHITESPACE) AS "xmlparse";
  xmlview6   | SELECT XMLPI(NAME foo, 'bar'::text) AS "xmlpi";
- xmlview7   | SELECT XMLROOT('<foo/>'::"xml", VERSION NO VALUE, STANDALONE YES) AS "xmlroot";
- xmlview8   | SELECT (XMLSERIALIZE(CONTENT 'good'::"xml" AS character(10)))::character(10) AS "xmlserialize";
- xmlview9   | SELECT XMLSERIALIZE(CONTENT 'good'::"xml" AS text) AS "xmlserialize";
+ xmlview7   | SELECT XMLROOT('<foo/>'::xml, VERSION NO VALUE, STANDALONE YES) AS "xmlroot";
+ xmlview8   | SELECT (XMLSERIALIZE(CONTENT 'good'::xml AS character(10)))::character(10) AS "xmlserialize";
+ xmlview9   | SELECT XMLSERIALIZE(CONTENT 'good'::xml AS text) AS "xmlserialize";
 (9 rows)
 
 -- Text XPath expressions evaluation
diff --git a/src/test/regress/expected/xml_1.out b/src/test/regress/expected/xml_1.out
index 2bf910577057dc26ff3aaf4556ffeec5694ede9f..68cd823bcbd30852ebe0dc3dba95ff53dfe18403 100644
--- a/src/test/regress/expected/xml_1.out
+++ b/src/test/regress/expected/xml_1.out
@@ -50,7 +50,7 @@ ERROR:  unsupported XML feature
 DETAIL:  This functionality requires libxml support.
 HINT:  You need to re-compile PostgreSQL using --with-libxml.
 SELECT xmlconcat(1, 2);
-ERROR:  argument of XMLCONCAT must be type "xml", not type integer
+ERROR:  argument of XMLCONCAT must be type xml, not type integer
 SELECT xmlconcat('bad', '<syntax');
 ERROR:  unsupported XML feature
 DETAIL:  This functionality requires libxml support.
diff --git a/src/test/regress/output/create_function_1.source b/src/test/regress/output/create_function_1.source
index e7fd46130f0d96e86d2da8e8985a21438e53c17e..1b309cf11a7815b5bb744c5fe8b1102e7413feb0 100644
--- a/src/test/regress/output/create_function_1.source
+++ b/src/test/regress/output/create_function_1.source
@@ -51,7 +51,7 @@ CREATE FUNCTION set_ttdummy (int4)
 CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL
     AS 'SELECT ''not an integer'';';
 ERROR:  return type mismatch in function declared to return integer
-DETAIL:  Actual return type is "unknown".
+DETAIL:  Actual return type is unknown.
 CONTEXT:  SQL function "test1"
 CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL
     AS 'not even SQL';