explicit-pg-catalog-v2.patch
application/octet-stream
Filename: explicit-pg-catalog-v2.patch
Type: application/octet-stream
Part: 0
Patch
Format: unified
Series: patch v2
| File | + | − |
|---|---|---|
| src/backend/catalog/namespace.c | 30 | 20 |
| src/backend/catalog/system_views.sql | 51 | 51 |
| src/backend/commands/extension.c | 13 | 4 |
| src/backend/snowball/snowball_func.sql.in | 4 | 6 |
| src/backend/snowball/snowball.sql.in | 2 | 2 |
| src/backend/utils/mb/conversion_procs/Makefile | 1 | 1 |
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;"; \