diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c
index 040bef6addbecd934c173eac9f81bb65502494dd..fcc90fed5fd16eaca06a31f05f9f827d388bc268 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -225,7 +225,6 @@ RangeVarGetRelid(const RangeVar *relation, LOCKMODE lockmode, bool missing_ok,
 				 bool nowait)
 {
 	uint64		inval_count;
-	Oid			namespaceId;
 	Oid			relId;
 	Oid			oldRelId = InvalidOid;
 	bool		retry = false;
@@ -278,17 +277,27 @@ RangeVarGetRelid(const RangeVar *relation, LOCKMODE lockmode, bool missing_ok,
 		 */
 		if (relation->relpersistence == RELPERSISTENCE_TEMP)
 		{
-			if (relation->schemaname)
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
-					   errmsg("temporary tables cannot specify a schema name")));
-			if (OidIsValid(myTempNamespace))
+			if (!OidIsValid(myTempNamespace))
+				relId = InvalidOid;	/* this probably can't happen? */
+			else
+			{
+				if (relation->schemaname)
+				{
+					Oid		namespaceId;
+					namespaceId = LookupExplicitNamespace(relation->schemaname);
+					if (namespaceId != myTempNamespace)
+						ereport(ERROR,
+								(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
+							   errmsg("temporary tables cannot specify a schema name")));
+				}
+
 				relId = get_relname_relid(relation->relname, myTempNamespace);
-			else	/* this probably can't happen? */
-				relId = InvalidOid;
+			}
 		}
 		else if (relation->schemaname)
 		{
+			Oid			namespaceId;
+
 			/* use exact schema given */
 			namespaceId = LookupExplicitNamespace(relation->schemaname);
 			relId = get_relname_relid(relation->relname, namespaceId);
diff --git a/src/test/regress/expected/create_table.out b/src/test/regress/expected/create_table.out
index b1dedd469d77163cc51f93bbe7f0c422199879d6..d20790f9098492176dc2d3a298f4f5ec665e9323 100644
--- a/src/test/regress/expected/create_table.out
+++ b/src/test/regress/expected/create_table.out
@@ -204,14 +204,19 @@ CREATE TABLE IF NOT EXISTS test_tsvector(
 	t text
 );
 NOTICE:  relation "test_tsvector" already exists, skipping
-CREATE UNLOGGED TABLE unlogged1 (a int);			-- OK
+CREATE UNLOGGED TABLE unlogged1 (a int primary key);			-- OK
+NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "unlogged1_pkey" for table "unlogged1"
 INSERT INTO unlogged1 VALUES (42);
-CREATE UNLOGGED TABLE public.unlogged2 (a int);		-- also OK
-CREATE UNLOGGED TABLE pg_temp.unlogged3 (a int);	-- not OK
+CREATE UNLOGGED TABLE public.unlogged2 (a int primary key);		-- also OK
+NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "unlogged2_pkey" for table "unlogged2"
+CREATE UNLOGGED TABLE pg_temp.unlogged3 (a int primary key);	-- not OK
 ERROR:  only temporary relations may be created in temporary schemas
-CREATE TABLE pg_temp.implicity_temp (a int);		-- OK
-CREATE TEMP TABLE explicitly_temp (a int);			-- also OK
-CREATE TEMP TABLE pg_temp.doubly_temp (a int);		-- also OK
-CREATE TEMP TABLE public.temp_to_perm (a int);		-- not OK
+CREATE TABLE pg_temp.implicitly_temp (a int primary key);		-- OK
+NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "implicitly_temp_pkey" for table "implicitly_temp"
+CREATE TEMP TABLE explicitly_temp (a int primary key);			-- also OK
+NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "explicitly_temp_pkey" for table "explicitly_temp"
+CREATE TEMP TABLE pg_temp.doubly_temp (a int primary key);		-- also OK
+NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "doubly_temp_pkey" for table "doubly_temp"
+CREATE TEMP TABLE public.temp_to_perm (a int primary key);		-- not OK
 ERROR:  cannot create temporary relation in non-temporary schema
 DROP TABLE unlogged1, public.unlogged2;
diff --git a/src/test/regress/sql/create_table.sql b/src/test/regress/sql/create_table.sql
index c1b2acf94de9e47d11a1db72985b1dc201e62717..a050e8b6d1a67b71f9105f38858e6c6379e02578 100644
--- a/src/test/regress/sql/create_table.sql
+++ b/src/test/regress/sql/create_table.sql
@@ -241,12 +241,12 @@ CREATE TABLE IF NOT EXISTS test_tsvector(
 	t text
 );
 
-CREATE UNLOGGED TABLE unlogged1 (a int);			-- OK
+CREATE UNLOGGED TABLE unlogged1 (a int primary key);			-- OK
 INSERT INTO unlogged1 VALUES (42);
-CREATE UNLOGGED TABLE public.unlogged2 (a int);		-- also OK
-CREATE UNLOGGED TABLE pg_temp.unlogged3 (a int);	-- not OK
-CREATE TABLE pg_temp.implicity_temp (a int);		-- OK
-CREATE TEMP TABLE explicitly_temp (a int);			-- also OK
-CREATE TEMP TABLE pg_temp.doubly_temp (a int);		-- also OK
-CREATE TEMP TABLE public.temp_to_perm (a int);		-- not OK
+CREATE UNLOGGED TABLE public.unlogged2 (a int primary key);		-- also OK
+CREATE UNLOGGED TABLE pg_temp.unlogged3 (a int primary key);	-- not OK
+CREATE TABLE pg_temp.implicitly_temp (a int primary key);		-- OK
+CREATE TEMP TABLE explicitly_temp (a int primary key);			-- also OK
+CREATE TEMP TABLE pg_temp.doubly_temp (a int primary key);		-- also OK
+CREATE TEMP TABLE public.temp_to_perm (a int primary key);		-- not OK
 DROP TABLE unlogged1, public.unlogged2;