aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/brin/brin.c3
-rw-r--r--src/backend/catalog/index.c13
-rw-r--r--src/backend/commands/analyze.c3
-rw-r--r--src/backend/commands/cluster.c3
-rw-r--r--src/backend/commands/indexcmds.c10
-rw-r--r--src/backend/commands/matview.c3
-rw-r--r--src/backend/commands/vacuum.c3
-rw-r--r--src/backend/utils/misc/guc.c19
-rw-r--r--src/include/utils/guc.h7
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);