diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend/catalog/namespace.c | 18 | ||||
| -rw-r--r-- | src/backend/utils/cache/plancache.c | 4 | 
2 files changed, 16 insertions, 6 deletions
diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index e2e19985506..2e5bb276097 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -13,7 +13,7 @@   * Portions Copyright (c) 1994, Regents of the University of California   *   * IDENTIFICATION - *	  $PostgreSQL: pgsql/src/backend/catalog/namespace.c,v 1.125 2010/02/26 02:00:36 momjian Exp $ + *	  $PostgreSQL: pgsql/src/backend/catalog/namespace.c,v 1.125.4.1 2010/08/13 16:27:18 tgl Exp $   *   *-------------------------------------------------------------------------   */ @@ -2666,6 +2666,17 @@ GetOverrideSearchPath(MemoryContext context)   *   * We allow nested overrides, hence the push/pop terminology.  The GUC   * search_path variable is ignored while an override is active. + * + * It's possible that newpath->useTemp is set but there is no longer any + * active temp namespace, if the path was saved during a transaction that + * created a temp namespace and was later rolled back.  In that case we just + * ignore useTemp.  A plausible alternative would be to create a new temp + * namespace, but for existing callers that's not necessary because an empty + * temp namespace wouldn't affect their results anyway. + * + * It's also worth noting that other schemas listed in newpath might not + * exist anymore either.  We don't worry about this because OIDs that match + * no existing namespace will simply not produce any hits during searches.   */  void  PushOverrideSearchPath(OverrideSearchPath *newpath) @@ -2699,11 +2710,8 @@ PushOverrideSearchPath(OverrideSearchPath *newpath)  	if (newpath->addCatalog)  		oidlist = lcons_oid(PG_CATALOG_NAMESPACE, oidlist); -	if (newpath->addTemp) -	{ -		Assert(OidIsValid(myTempNamespace)); +	if (newpath->addTemp && OidIsValid(myTempNamespace))  		oidlist = lcons_oid(myTempNamespace, oidlist); -	}  	/*  	 * Build the new stack entry, then insert it at the head of the list. diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c index 95f010f682d..06e254912bf 100644 --- a/src/backend/utils/cache/plancache.c +++ b/src/backend/utils/cache/plancache.c @@ -35,7 +35,7 @@   * Portions Copyright (c) 1994, Regents of the University of California   *   * IDENTIFICATION - *	  $PostgreSQL: pgsql/src/backend/utils/cache/plancache.c,v 1.35 2010/02/26 02:01:11 momjian Exp $ + *	  $PostgreSQL: pgsql/src/backend/utils/cache/plancache.c,v 1.35.4.1 2010/08/13 16:27:18 tgl Exp $   *   *-------------------------------------------------------------------------   */ @@ -513,6 +513,8 @@ RevalidateCachedPlan(CachedPlanSource *plansource, bool useResOwner)  		/*  		 * Restore the search_path that was in use when the plan was made. +		 * See comments for PushOverrideSearchPath about limitations of this. +		 *  		 * (XXX is there anything else we really need to restore?)  		 */  		PushOverrideSearchPath(plansource->search_path);  | 
