From 20e82a7c0ba474dc405902a8208f72dda9b3ce45 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 21 Mar 2008 22:10:56 +0000
Subject: [PATCH] Give an explicit error for serial[], rather than silently
 ignoring the array decoration as the code had been doing.

---
 src/backend/parser/parse_utilcmd.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c
index a9079ff2a9e..e2699592970 100644
--- a/src/backend/parser/parse_utilcmd.c
+++ b/src/backend/parser/parse_utilcmd.c
@@ -19,7 +19,7 @@
  * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *	$PostgreSQL: pgsql/src/backend/parser/parse_utilcmd.c,v 2.9 2008/02/07 17:09:51 tgl Exp $
+ *	$PostgreSQL: pgsql/src/backend/parser/parse_utilcmd.c,v 2.10 2008/03/21 22:10:56 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -266,7 +266,8 @@ transformColumnDefinition(ParseState *pstate, CreateStmtContext *cxt,
 
 	/* Check for SERIAL pseudo-types */
 	is_serial = false;
-	if (list_length(column->typename->names) == 1)
+	if (list_length(column->typename->names) == 1 &&
+		!column->typename->pct_type)
 	{
 		char	   *typname = strVal(linitial(column->typename->names));
 
@@ -284,6 +285,16 @@ transformColumnDefinition(ParseState *pstate, CreateStmtContext *cxt,
 			column->typename->names = NIL;
 			column->typename->typeid = INT8OID;
 		}
+
+		/*
+		 * We have to reject "serial[]" explicitly, because once we've
+		 * set typeid, LookupTypeName won't notice arrayBounds.  We don't
+		 * need any special coding for serial(typmod) though.
+		 */
+		if (is_serial && column->typename->arrayBounds != NIL)
+			ereport(ERROR,
+					(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+					 errmsg("array of serial is not implemented")));
 	}
 
 	/* Do necessary work on the column type declaration */
-- 
GitLab