diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/access/brin/brin.c | 3 | ||||
-rw-r--r-- | src/backend/catalog/index.c | 13 | ||||
-rw-r--r-- | src/backend/commands/analyze.c | 3 | ||||
-rw-r--r-- | src/backend/commands/cluster.c | 3 | ||||
-rw-r--r-- | src/backend/commands/indexcmds.c | 10 | ||||
-rw-r--r-- | src/backend/commands/matview.c | 3 | ||||
-rw-r--r-- | src/backend/commands/vacuum.c | 3 | ||||
-rw-r--r-- | src/backend/utils/misc/guc.c | 19 | ||||
-rw-r--r-- | src/include/utils/guc.h | 7 |
9 files changed, 32 insertions, 32 deletions
diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index 9ea6f37f2be..041415a40e7 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -1412,8 +1412,7 @@ brin_summarize_range(PG_FUNCTION_ARGS) SetUserIdAndSecContext(heapRel->rd_rel->relowner, save_sec_context | SECURITY_RESTRICTED_OPERATION); save_nestlevel = NewGUCNestLevel(); - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); } else { diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 1813b73a4fa..e6140853c05 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -1464,8 +1464,7 @@ index_concurrently_build(Oid heapRelationId, SetUserIdAndSecContext(heapRel->rd_rel->relowner, save_sec_context | SECURITY_RESTRICTED_OPERATION); save_nestlevel = NewGUCNestLevel(); - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); indexRelation = index_open(indexRelationId, RowExclusiveLock); @@ -3018,9 +3017,7 @@ index_build(Relation heapRelation, SetUserIdAndSecContext(heapRelation->rd_rel->relowner, save_sec_context | SECURITY_RESTRICTED_OPERATION); save_nestlevel = NewGUCNestLevel(); - if (!IsBootstrapProcessingMode()) - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); /* Set up initial progress report status */ { @@ -3356,8 +3353,7 @@ validate_index(Oid heapId, Oid indexId, Snapshot snapshot) SetUserIdAndSecContext(heapRelation->rd_rel->relowner, save_sec_context | SECURITY_RESTRICTED_OPERATION); save_nestlevel = NewGUCNestLevel(); - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); indexRelation = index_open(indexId, RowExclusiveLock); @@ -3619,8 +3615,7 @@ reindex_index(const ReindexStmt *stmt, Oid indexId, SetUserIdAndSecContext(heapRelation->rd_rel->relowner, save_sec_context | SECURITY_RESTRICTED_OPERATION); save_nestlevel = NewGUCNestLevel(); - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); if (progress) { diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index b054ba18155..29b6a20f1ed 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -339,8 +339,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params, SetUserIdAndSecContext(onerel->rd_rel->relowner, save_sec_context | SECURITY_RESTRICTED_OPERATION); save_nestlevel = NewGUCNestLevel(); - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); /* measure elapsed time iff autovacuum logging requires it */ if (AmAutoVacuumWorkerProcess() && params->log_min_duration >= 0) diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index 2b69dc0558f..cea7c8ea368 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -350,8 +350,7 @@ cluster_rel(Oid tableOid, Oid indexOid, ClusterParams *params) SetUserIdAndSecContext(OldHeap->rd_rel->relowner, save_sec_context | SECURITY_RESTRICTED_OPERATION); save_nestlevel = NewGUCNestLevel(); - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); /* * Since we may open a new transaction for each relation, we have to check diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d0813278eac..943a48bfa71 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -585,9 +585,7 @@ DefineIndex(Oid tableId, root_save_nestlevel = NewGUCNestLevel(); - if (!IsBootstrapProcessingMode()) - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); /* * Some callers need us to run with an empty default_tablespace; this is a @@ -1344,8 +1342,7 @@ DefineIndex(Oid tableId, SetUserIdAndSecContext(childrel->rd_rel->relowner, child_save_sec_context | SECURITY_RESTRICTED_OPERATION); child_save_nestlevel = NewGUCNestLevel(); - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); /* * Don't try to create indexes on foreign tables, though. Skip @@ -3887,8 +3884,7 @@ ReindexRelationConcurrently(const ReindexStmt *stmt, Oid relationOid, const Rein SetUserIdAndSecContext(heapRel->rd_rel->relowner, save_sec_context | SECURITY_RESTRICTED_OPERATION); save_nestlevel = NewGUCNestLevel(); - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); /* determine safety of this index for set_indexsafe_procflags */ idx->safe = (indexRel->rd_indexprs == NIL && diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index 1887cd60ea6..03373462f0e 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -173,8 +173,7 @@ ExecRefreshMatView(RefreshMatViewStmt *stmt, const char *queryString, SetUserIdAndSecContext(relowner, save_sec_context | SECURITY_RESTRICTED_OPERATION); save_nestlevel = NewGUCNestLevel(); - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); /* Make sure it is a materialized view. */ if (matviewRel->rd_rel->relkind != RELKIND_MATVIEW) diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 02d0dc4aba7..25281bbed98 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -2166,8 +2166,7 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, SetUserIdAndSecContext(rel->rd_rel->relowner, save_sec_context | SECURITY_RESTRICTED_OPERATION); save_nestlevel = NewGUCNestLevel(); - SetConfigOption("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, - PGC_S_SESSION); + RestrictSearchPath(); /* * If PROCESS_MAIN is set (the default), it's time to vacuum the main diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index f12eef75e0c..dd5a46469a6 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -67,6 +67,12 @@ */ #define REALTYPE_PRECISION 17 +/* + * Safe search path when executing code as the table owner, such as during + * maintenance operations. + */ +#define GUC_SAFE_SEARCH_PATH "pg_catalog, pg_temp" + static int GUC_check_errcode_value; static List *reserved_class_prefix = NIL; @@ -2235,6 +2241,19 @@ NewGUCNestLevel(void) } /* + * Set search_path to a fixed value for maintenance operations. No effect + * during bootstrap, when the search_path is already set to a fixed value and + * cannot be changed. + */ +void +RestrictSearchPath(void) +{ + if (!IsBootstrapProcessingMode()) + set_config_option("search_path", GUC_SAFE_SEARCH_PATH, PGC_USERSET, + PGC_S_SESSION, GUC_ACTION_SAVE, true, 0, false); +} + +/* * Do GUC processing at transaction or subtransaction commit or abort, or * when exiting a function that has proconfig settings, or when undoing a * transient assignment to some GUC variables. (The name is thus a bit of diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 391d8d02120..3712aba09b0 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -204,12 +204,6 @@ typedef enum #define GUC_QUALIFIER_SEPARATOR '.' /* - * Safe search path when executing code as the table owner, such as during - * maintenance operations. - */ -#define GUC_SAFE_SEARCH_PATH "pg_catalog, pg_temp" - -/* * Bit values in "flags" of a GUC variable. Note that these don't appear * on disk, so we can reassign their values freely. */ @@ -378,6 +372,7 @@ extern bool SelectConfigFiles(const char *userDoption, const char *progname); extern void ResetAllOptions(void); extern void AtStart_GUC(void); extern int NewGUCNestLevel(void); +extern void RestrictSearchPath(void); extern void AtEOXact_GUC(bool isCommit, int nestLevel); extern void BeginReportingGUCOptions(void); extern void ReportChangedGUCOptions(void); |