diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c
index f48c0bc..42e55f8 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -189,6 +189,7 @@ char	   *namespace_search_path = NULL;
 
 /* Local functions */
 static void recomputeNamespacePath(void);
+static Oid ChooseCreationNamespace(List *oidlist);
 static void InitTempTableNamespace(void);
 static void RemoveTempRelations(Oid tempNamespaceId);
 static void RemoveTempRelationsCallback(int code, Datum arg);
@@ -3166,7 +3167,7 @@ PushOverrideSearchPath(OverrideSearchPath *newpath)
 {
 	OverrideStackEntry *entry;
 	List	   *oidlist;
-	Oid			firstNS;
+	Oid			creationNS;
 	MemoryContext oldcxt;
 
 	/*
@@ -3177,13 +3178,8 @@ PushOverrideSearchPath(OverrideSearchPath *newpath)
 
 	oidlist = list_copy(newpath->schemas);
 
-	/*
-	 * Remember the first member of the explicit list.
-	 */
-	if (oidlist == NIL)
-		firstNS = InvalidOid;
-	else
-		firstNS = linitial_oid(oidlist);
+	/* Choose default creation namespace. */
+	creationNS = ChooseCreationNamespace(oidlist);
 
 	/*
 	 * Add any implicitly-searched namespaces to the list.	Note these go on
@@ -3201,7 +3197,7 @@ PushOverrideSearchPath(OverrideSearchPath *newpath)
 	 */
 	entry = (OverrideStackEntry *) palloc(sizeof(OverrideStackEntry));
 	entry->searchPath = oidlist;
-	entry->creationNamespace = firstNS;
+	entry->creationNamespace = creationNS;
 	entry->nestLevel = GetCurrentTransactionNestLevel();
 
 	overrideStack = lcons(entry, overrideStack);
@@ -3423,7 +3419,7 @@ recomputeNamespacePath(void)
 	List	   *newpath;
 	ListCell   *l;
 	bool		temp_missing;
-	Oid			firstNS;
+	Oid			creationNS;
 	MemoryContext oldcxt;
 
 	/* Do nothing if an override search spec is active. */
@@ -3508,15 +3504,8 @@ recomputeNamespacePath(void)
 		}
 	}
 
-	/*
-	 * Remember the first member of the explicit list.	(Note: this is
-	 * nominally wrong if temp_missing, but we need it anyway to distinguish
-	 * explicit from implicit mention of pg_catalog.)
-	 */
-	if (oidlist == NIL)
-		firstNS = InvalidOid;
-	else
-		firstNS = linitial_oid(oidlist);
+	/* Choose default creation namespace. */
+	creationNS = ChooseCreationNamespace(oidlist);
 
 	/*
 	 * Add any implicitly-searched namespaces to the list.	Note these go on
@@ -3541,7 +3530,7 @@ recomputeNamespacePath(void)
 	/* Now safe to assign to state variables. */
 	list_free(baseSearchPath);
 	baseSearchPath = newpath;
-	baseCreationNamespace = firstNS;
+	baseCreationNamespace = creationNS;
 	baseTempCreationPending = temp_missing;
 
 	/* Mark the path valid. */
@@ -3560,6 +3549,27 @@ recomputeNamespacePath(void)
 }
 
 /*
+ * Choose a suitable default creation namespace.  Except in bootstrap mode, we
+ * refuse to choose pg_catalog as a default even if it's explicitly present in
+ * the search_path.  The user must explicitly write e.g. CREATE TABLE
+ * pg_catalog.something to create objects there.
+ */
+static Oid
+ChooseCreationNamespace(List *oidlist)
+{
+	ListCell   *lc;
+
+	foreach (lc, oidlist)
+	{
+		Oid		oid = lfirst_oid(lc);
+
+		if (oid != PG_CATALOG_NAMESPACE || IsBootstrapProcessingMode())
+			return oid;
+	}
+	return InvalidOid;
+}
+
+/*
  * InitTempTableNamespace
  *		Initialize temp table namespace on first use in a particular backend
  */
diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index 57adbf6..0b5431b 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -6,7 +6,7 @@
  * src/backend/catalog/system_views.sql
  */
 
-CREATE VIEW pg_roles AS
+CREATE VIEW pg_catalog.pg_roles AS
     SELECT
         rolname,
         rolsuper,
@@ -24,7 +24,7 @@ CREATE VIEW pg_roles AS
     FROM pg_authid LEFT JOIN pg_db_role_setting s
     ON (pg_authid.oid = setrole AND setdatabase = 0);
 
-CREATE VIEW pg_shadow AS
+CREATE VIEW pg_catalog.pg_shadow AS
     SELECT
         rolname AS usename,
         pg_authid.oid AS usesysid,
@@ -41,7 +41,7 @@ CREATE VIEW pg_shadow AS
 
 REVOKE ALL on pg_shadow FROM public;
 
-CREATE VIEW pg_group AS
+CREATE VIEW pg_catalog.pg_group AS
     SELECT
         rolname AS groname,
         oid AS grosysid,
@@ -49,7 +49,7 @@ CREATE VIEW pg_group AS
     FROM pg_authid
     WHERE NOT rolcanlogin;
 
-CREATE VIEW pg_user AS
+CREATE VIEW pg_catalog.pg_user AS
     SELECT
         usename,
         usesysid,
@@ -62,7 +62,7 @@ CREATE VIEW pg_user AS
         useconfig
     FROM pg_shadow;
 
-CREATE VIEW pg_rules AS
+CREATE VIEW pg_catalog.pg_rules AS
     SELECT
         N.nspname AS schemaname,
         C.relname AS tablename,
@@ -72,7 +72,7 @@ CREATE VIEW pg_rules AS
         LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
     WHERE R.rulename != '_RETURN';
 
-CREATE VIEW pg_views AS
+CREATE VIEW pg_catalog.pg_views AS
     SELECT
         N.nspname AS schemaname,
         C.relname AS viewname,
@@ -81,7 +81,7 @@ CREATE VIEW pg_views AS
     FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
     WHERE C.relkind = 'v';
 
-CREATE VIEW pg_tables AS
+CREATE VIEW pg_catalog.pg_tables AS
     SELECT
         N.nspname AS schemaname,
         C.relname AS tablename,
@@ -94,7 +94,7 @@ CREATE VIEW pg_tables AS
          LEFT JOIN pg_tablespace T ON (T.oid = C.reltablespace)
     WHERE C.relkind = 'r';
 
-CREATE VIEW pg_matviews AS
+CREATE VIEW pg_catalog.pg_matviews AS
     SELECT
         N.nspname AS schemaname,
         C.relname AS matviewname,
@@ -107,7 +107,7 @@ CREATE VIEW pg_matviews AS
          LEFT JOIN pg_tablespace T ON (T.oid = C.reltablespace)
     WHERE C.relkind = 'm';
 
-CREATE VIEW pg_indexes AS
+CREATE VIEW pg_catalog.pg_indexes AS
     SELECT
         N.nspname AS schemaname,
         C.relname AS tablename,
@@ -120,7 +120,7 @@ CREATE VIEW pg_indexes AS
          LEFT JOIN pg_tablespace T ON (T.oid = I.reltablespace)
     WHERE C.relkind IN ('r', 'm') AND I.relkind = 'i';
 
-CREATE VIEW pg_stats AS
+CREATE VIEW pg_catalog.pg_stats AS
     SELECT
         nspname AS schemaname,
         relname AS tablename,
@@ -185,36 +185,36 @@ CREATE VIEW pg_stats AS
 
 REVOKE ALL on pg_statistic FROM public;
 
-CREATE VIEW pg_locks AS
+CREATE VIEW pg_catalog.pg_locks AS
     SELECT * FROM pg_lock_status() AS L;
 
-CREATE VIEW pg_cursors AS
+CREATE VIEW pg_catalog.pg_cursors AS
     SELECT * FROM pg_cursor() AS C;
 
-CREATE VIEW pg_available_extensions AS
+CREATE VIEW pg_catalog.pg_available_extensions AS
     SELECT E.name, E.default_version, X.extversion AS installed_version,
            E.comment
       FROM pg_available_extensions() AS E
            LEFT JOIN pg_extension AS X ON E.name = X.extname;
 
-CREATE VIEW pg_available_extension_versions AS
+CREATE VIEW pg_catalog.pg_available_extension_versions AS
     SELECT E.name, E.version, (X.extname IS NOT NULL) AS installed,
            E.superuser, E.relocatable, E.schema, E.requires, E.comment
       FROM pg_available_extension_versions() AS E
            LEFT JOIN pg_extension AS X
              ON E.name = X.extname AND E.version = X.extversion;
 
-CREATE VIEW pg_prepared_xacts AS
+CREATE VIEW pg_catalog.pg_prepared_xacts AS
     SELECT P.transaction, P.gid, P.prepared,
            U.rolname AS owner, D.datname AS database
     FROM pg_prepared_xact() AS P
          LEFT JOIN pg_authid U ON P.ownerid = U.oid
          LEFT JOIN pg_database D ON P.dbid = D.oid;
 
-CREATE VIEW pg_prepared_statements AS
+CREATE VIEW pg_catalog.pg_prepared_statements AS
     SELECT * FROM pg_prepared_statement() AS P;
 
-CREATE VIEW pg_seclabels AS
+CREATE VIEW pg_catalog.pg_seclabels AS
 SELECT
 	l.objoid, l.classoid, l.objsubid,
 	CASE WHEN rel.relkind = 'r' THEN 'table'::text
@@ -367,7 +367,7 @@ FROM
 	pg_shseclabel l
 	JOIN pg_authid rol ON l.classoid = rol.tableoid AND l.objoid = rol.oid;
 
-CREATE VIEW pg_settings AS
+CREATE VIEW pg_catalog.pg_settings AS
     SELECT * FROM pg_show_all_settings() AS A;
 
 CREATE RULE pg_settings_u AS
@@ -381,15 +381,15 @@ CREATE RULE pg_settings_n AS
 
 GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
 
-CREATE VIEW pg_timezone_abbrevs AS
+CREATE VIEW pg_catalog.pg_timezone_abbrevs AS
     SELECT * FROM pg_timezone_abbrevs();
 
-CREATE VIEW pg_timezone_names AS
+CREATE VIEW pg_catalog.pg_timezone_names AS
     SELECT * FROM pg_timezone_names();
 
 -- Statistics views
 
-CREATE VIEW pg_stat_all_tables AS
+CREATE VIEW pg_catalog.pg_stat_all_tables AS
     SELECT
             C.oid AS relid,
             N.nspname AS schemaname,
@@ -419,7 +419,7 @@ CREATE VIEW pg_stat_all_tables AS
     WHERE C.relkind IN ('r', 't', 'm')
     GROUP BY C.oid, N.nspname, C.relname;
 
-CREATE VIEW pg_stat_xact_all_tables AS
+CREATE VIEW pg_catalog.pg_stat_xact_all_tables AS
     SELECT
             C.oid AS relid,
             N.nspname AS schemaname,
@@ -439,27 +439,27 @@ CREATE VIEW pg_stat_xact_all_tables AS
     WHERE C.relkind IN ('r', 't', 'm')
     GROUP BY C.oid, N.nspname, C.relname;
 
-CREATE VIEW pg_stat_sys_tables AS
+CREATE VIEW pg_catalog.pg_stat_sys_tables AS
     SELECT * FROM pg_stat_all_tables
     WHERE schemaname IN ('pg_catalog', 'information_schema') OR
           schemaname ~ '^pg_toast';
 
-CREATE VIEW pg_stat_xact_sys_tables AS
+CREATE VIEW pg_catalog.pg_stat_xact_sys_tables AS
     SELECT * FROM pg_stat_xact_all_tables
     WHERE schemaname IN ('pg_catalog', 'information_schema') OR
           schemaname ~ '^pg_toast';
 
-CREATE VIEW pg_stat_user_tables AS
+CREATE VIEW pg_catalog.pg_stat_user_tables AS
     SELECT * FROM pg_stat_all_tables
     WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND
           schemaname !~ '^pg_toast';
 
-CREATE VIEW pg_stat_xact_user_tables AS
+CREATE VIEW pg_catalog.pg_stat_xact_user_tables AS
     SELECT * FROM pg_stat_xact_all_tables
     WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND
           schemaname !~ '^pg_toast';
 
-CREATE VIEW pg_statio_all_tables AS
+CREATE VIEW pg_catalog.pg_statio_all_tables AS
     SELECT
             C.oid AS relid,
             N.nspname AS schemaname,
@@ -484,17 +484,17 @@ CREATE VIEW pg_statio_all_tables AS
     WHERE C.relkind IN ('r', 't', 'm')
     GROUP BY C.oid, N.nspname, C.relname, T.oid, X.oid;
 
-CREATE VIEW pg_statio_sys_tables AS
+CREATE VIEW pg_catalog.pg_statio_sys_tables AS
     SELECT * FROM pg_statio_all_tables
     WHERE schemaname IN ('pg_catalog', 'information_schema') OR
           schemaname ~ '^pg_toast';
 
-CREATE VIEW pg_statio_user_tables AS
+CREATE VIEW pg_catalog.pg_statio_user_tables AS
     SELECT * FROM pg_statio_all_tables
     WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND
           schemaname !~ '^pg_toast';
 
-CREATE VIEW pg_stat_all_indexes AS
+CREATE VIEW pg_catalog.pg_stat_all_indexes AS
     SELECT
             C.oid AS relid,
             I.oid AS indexrelid,
@@ -510,17 +510,17 @@ CREATE VIEW pg_stat_all_indexes AS
             LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
     WHERE C.relkind IN ('r', 't', 'm');
 
-CREATE VIEW pg_stat_sys_indexes AS
+CREATE VIEW pg_catalog.pg_stat_sys_indexes AS
     SELECT * FROM pg_stat_all_indexes
     WHERE schemaname IN ('pg_catalog', 'information_schema') OR
           schemaname ~ '^pg_toast';
 
-CREATE VIEW pg_stat_user_indexes AS
+CREATE VIEW pg_catalog.pg_stat_user_indexes AS
     SELECT * FROM pg_stat_all_indexes
     WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND
           schemaname !~ '^pg_toast';
 
-CREATE VIEW pg_statio_all_indexes AS
+CREATE VIEW pg_catalog.pg_statio_all_indexes AS
     SELECT
             C.oid AS relid,
             I.oid AS indexrelid,
@@ -536,17 +536,17 @@ CREATE VIEW pg_statio_all_indexes AS
             LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
     WHERE C.relkind IN ('r', 't', 'm');
 
-CREATE VIEW pg_statio_sys_indexes AS
+CREATE VIEW pg_catalog.pg_statio_sys_indexes AS
     SELECT * FROM pg_statio_all_indexes
     WHERE schemaname IN ('pg_catalog', 'information_schema') OR
           schemaname ~ '^pg_toast';
 
-CREATE VIEW pg_statio_user_indexes AS
+CREATE VIEW pg_catalog.pg_statio_user_indexes AS
     SELECT * FROM pg_statio_all_indexes
     WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND
           schemaname !~ '^pg_toast';
 
-CREATE VIEW pg_statio_all_sequences AS
+CREATE VIEW pg_catalog.pg_statio_all_sequences AS
     SELECT
             C.oid AS relid,
             N.nspname AS schemaname,
@@ -558,17 +558,17 @@ CREATE VIEW pg_statio_all_sequences AS
             LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
     WHERE C.relkind = 'S';
 
-CREATE VIEW pg_statio_sys_sequences AS
+CREATE VIEW pg_catalog.pg_statio_sys_sequences AS
     SELECT * FROM pg_statio_all_sequences
     WHERE schemaname IN ('pg_catalog', 'information_schema') OR
           schemaname ~ '^pg_toast';
 
-CREATE VIEW pg_statio_user_sequences AS
+CREATE VIEW pg_catalog.pg_statio_user_sequences AS
     SELECT * FROM pg_statio_all_sequences
     WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND
           schemaname !~ '^pg_toast';
 
-CREATE VIEW pg_stat_activity AS
+CREATE VIEW pg_catalog.pg_stat_activity AS
     SELECT
             S.datid AS datid,
             D.datname AS datname,
@@ -590,7 +590,7 @@ CREATE VIEW pg_stat_activity AS
     WHERE S.datid = D.oid AND
             S.usesysid = U.oid;
 
-CREATE VIEW pg_stat_replication AS
+CREATE VIEW pg_catalog.pg_stat_replication AS
     SELECT
             S.pid,
             S.usesysid,
@@ -612,7 +612,7 @@ CREATE VIEW pg_stat_replication AS
     WHERE S.usesysid = U.oid AND
             S.pid = W.pid;
 
-CREATE VIEW pg_stat_database AS
+CREATE VIEW pg_catalog.pg_stat_database AS
     SELECT
             D.oid AS datid,
             D.datname AS datname,
@@ -636,7 +636,7 @@ CREATE VIEW pg_stat_database AS
             pg_stat_get_db_stat_reset_time(D.oid) AS stats_reset
     FROM pg_database D;
 
-CREATE VIEW pg_stat_database_conflicts AS
+CREATE VIEW pg_catalog.pg_stat_database_conflicts AS
     SELECT
             D.oid AS datid,
             D.datname AS datname,
@@ -647,7 +647,7 @@ CREATE VIEW pg_stat_database_conflicts AS
             pg_stat_get_db_conflict_startup_deadlock(D.oid) AS confl_deadlock
     FROM pg_database D;
 
-CREATE VIEW pg_stat_user_functions AS
+CREATE VIEW pg_catalog.pg_stat_user_functions AS
     SELECT
             P.oid AS funcid,
             N.nspname AS schemaname,
@@ -659,7 +659,7 @@ CREATE VIEW pg_stat_user_functions AS
     WHERE P.prolang != 12  -- fast check to eliminate built-in functions
           AND pg_stat_get_function_calls(P.oid) IS NOT NULL;
 
-CREATE VIEW pg_stat_xact_user_functions AS
+CREATE VIEW pg_catalog.pg_stat_xact_user_functions AS
     SELECT
             P.oid AS funcid,
             N.nspname AS schemaname,
@@ -671,7 +671,7 @@ CREATE VIEW pg_stat_xact_user_functions AS
     WHERE P.prolang != 12  -- fast check to eliminate built-in functions
           AND pg_stat_get_xact_function_calls(P.oid) IS NOT NULL;
 
-CREATE VIEW pg_stat_bgwriter AS
+CREATE VIEW pg_catalog.pg_stat_bgwriter AS
     SELECT
         pg_stat_get_bgwriter_timed_checkpoints() AS checkpoints_timed,
         pg_stat_get_bgwriter_requested_checkpoints() AS checkpoints_req,
@@ -685,7 +685,7 @@ CREATE VIEW pg_stat_bgwriter AS
         pg_stat_get_buf_alloc() AS buffers_alloc,
         pg_stat_get_bgwriter_stat_reset_time() AS stats_reset;
 
-CREATE VIEW pg_user_mappings AS
+CREATE VIEW pg_catalog.pg_user_mappings AS
     SELECT
         U.oid       AS umid,
         S.oid       AS srvid,
@@ -716,7 +716,7 @@ REVOKE ALL on pg_user_mapping FROM public;
 -- Tsearch debug function.  Defined here because it'd be pretty unwieldy
 -- to put it into pg_proc.h
 
-CREATE FUNCTION ts_debug(IN config regconfig, IN document text,
+CREATE FUNCTION pg_catalog.ts_debug(IN config regconfig, IN document text,
     OUT alias text,
     OUT description text,
     OUT token text,
@@ -759,7 +759,7 @@ LANGUAGE SQL STRICT STABLE;
 COMMENT ON FUNCTION ts_debug(regconfig,text) IS
     'debug function for text search configuration';
 
-CREATE FUNCTION ts_debug(IN document text,
+CREATE FUNCTION pg_catalog.ts_debug(IN document text,
     OUT alias text,
     OUT description text,
     OUT token text,
@@ -785,13 +785,13 @@ COMMENT ON FUNCTION ts_debug(text) IS
 --
 
 CREATE OR REPLACE FUNCTION
-  pg_start_backup(label text, fast boolean DEFAULT false)
+  pg_catalog.pg_start_backup(label text, fast boolean DEFAULT false)
   RETURNS text STRICT VOLATILE LANGUAGE internal AS 'pg_start_backup';
 
 CREATE OR REPLACE FUNCTION 
-  json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)
+  pg_catalog.json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)
   RETURNS anyelement LANGUAGE internal STABLE AS 'json_populate_record';
 
 CREATE OR REPLACE FUNCTION 
-  json_populate_recordset(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)
+  pg_catalog.json_populate_recordset(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)
   RETURNS SETOF anyelement LANGUAGE internal STABLE ROWS 100  AS 'json_populate_recordset';
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 2d84ac8..e350f3f 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -1356,6 +1356,11 @@ CreateExtension(CreateExtensionStmt *stmt)
 				errmsg("extension \"%s\" must be installed in schema \"%s\"",
 					   control->name,
 					   control->schema)));
+		if (control->relocatable && strcmp(schemaName, "pg_catalog") == 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+				errmsg("relocatable extensions may not be installed in schema \"%s\"",
+					   schemaName)));
 
 		/* If the user is giving us the schema name, it must exist already */
 		schemaOid = get_namespace_oid(schemaName, false);
@@ -1390,16 +1395,20 @@ CreateExtension(CreateExtensionStmt *stmt)
 	{
 		/*
 		 * Else, use the current default creation namespace, which is the
-		 * first explicit entry in the search_path.
+		 * first explicit entry in the search_path (other than pg_catalog).
 		 */
 		List	   *search_path = fetch_search_path(false);
 
-		if (search_path == NIL) /* probably can't happen */
-			elog(ERROR, "there is no default creation target");
+		if (search_path == NIL)
+			ereport(ERROR,
+					(errcode(ERRCODE_UNDEFINED_SCHEMA),
+					 errmsg("no schema has been selected to create in")));
 		schemaOid = linitial_oid(search_path);
 		schemaName = get_namespace_name(schemaOid);
 		if (schemaName == NULL) /* recently-deleted namespace? */
-			elog(ERROR, "there is no default creation target");
+			ereport(ERROR,
+					(errcode(ERRCODE_UNDEFINED_SCHEMA),
+					 errmsg("no schema has been selected to create in")));
 
 		list_free(search_path);
 	}
diff --git a/src/backend/snowball/snowball.sql.in b/src/backend/snowball/snowball.sql.in
index 2f68393..b6301ab 100644
--- a/src/backend/snowball/snowball.sql.in
+++ b/src/backend/snowball/snowball.sql.in
@@ -1,12 +1,12 @@
 -- src/backend/snowball/snowball.sql.in$
 
 -- text search configuration for _LANGNAME_ language
-CREATE TEXT SEARCH DICTIONARY _DICTNAME_
+CREATE TEXT SEARCH DICTIONARY pg_catalog._DICTNAME_
 	(TEMPLATE = snowball, Language = _LANGNAME_ _STOPWORDS_);
 
 COMMENT ON TEXT SEARCH DICTIONARY _DICTNAME_ IS 'snowball stemmer for _LANGNAME_ language';
 
-CREATE TEXT SEARCH CONFIGURATION _CFGNAME_
+CREATE TEXT SEARCH CONFIGURATION pg_catalog._CFGNAME_
 	(PARSER = default);
 
 COMMENT ON TEXT SEARCH CONFIGURATION _CFGNAME_ IS 'configuration for _LANGNAME_ language';
diff --git a/src/backend/snowball/snowball_func.sql.in b/src/backend/snowball/snowball_func.sql.in
index e7d4510..86e6044 100644
--- a/src/backend/snowball/snowball_func.sql.in
+++ b/src/backend/snowball/snowball_func.sql.in
@@ -1,17 +1,15 @@
 -- src/backend/snowball/snowball_func.sql.in$
 
-SET search_path = pg_catalog;
-
-CREATE FUNCTION dsnowball_init(INTERNAL)
+CREATE FUNCTION pg_catalog.dsnowball_init(INTERNAL)
     RETURNS INTERNAL AS '$libdir/dict_snowball', 'dsnowball_init'
 LANGUAGE C STRICT;
 
-CREATE FUNCTION dsnowball_lexize(INTERNAL, INTERNAL, INTERNAL, INTERNAL)
+CREATE FUNCTION pg_catalog.dsnowball_lexize(INTERNAL, INTERNAL, INTERNAL, INTERNAL)
     RETURNS INTERNAL AS '$libdir/dict_snowball', 'dsnowball_lexize'
 LANGUAGE C STRICT;
 
-CREATE TEXT SEARCH TEMPLATE snowball
+CREATE TEXT SEARCH TEMPLATE pg_catalog.snowball
 	(INIT = dsnowball_init,
 	LEXIZE = dsnowball_lexize);
 
-COMMENT ON TEXT SEARCH TEMPLATE snowball IS 'snowball stemmer';
+COMMENT ON TEXT SEARCH TEMPLATE pg_catalog.snowball IS 'snowball stemmer';
diff --git a/src/backend/utils/mb/conversion_procs/Makefile b/src/backend/utils/mb/conversion_procs/Makefile
index 8481721..ef87ee5 100644
--- a/src/backend/utils/mb/conversion_procs/Makefile
+++ b/src/backend/utils/mb/conversion_procs/Makefile
@@ -176,7 +176,7 @@ $(SQLSCRIPT): Makefile
 		func=$$1; shift; \
 		obj=$$1; shift; \
 		echo "-- $$se --> $$de"; \
-		echo "CREATE OR REPLACE FUNCTION $$func (INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) RETURNS VOID AS '$$"libdir"/$$obj', '$$func' LANGUAGE C STRICT;"; \
+		echo "CREATE OR REPLACE FUNCTION pg_catalog.$$func (INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) RETURNS VOID AS '$$"libdir"/$$obj', '$$func' LANGUAGE C STRICT;"; \
 	        echo "COMMENT ON FUNCTION $$func(INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) IS 'internal conversion function for $$se to $$de';"; \
 		echo "DROP CONVERSION pg_catalog.$$name;"; \
 		echo "CREATE DEFAULT CONVERSION pg_catalog.$$name FOR '$$se' TO '$$de' FROM $$func;"; \
