mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Fix search_path to a safe value during maintenance operations.
While executing maintenance operations (ANALYZE, CLUSTER, REFRESH MATERIALIZED VIEW, REINDEX, or VACUUM), set search_path to 'pg_catalog, pg_temp' to prevent inconsistent behavior. Functions that are used for functional indexes, in index expressions, or in materialized views and depend on a different search path must be declared with CREATE FUNCTION ... SET search_path='...'. This change was previously committed as05e1737351
, then reverted in commit2fcc7ee7af
because it was too late in the cycle. Preparation for the MAINTAIN privilege, which was previously reverted due to search_path manipulation hazards. Discussion: https://postgr.es/m/d4ccaf3658cb3c281ec88c851a09733cd9482f22.camel@j-davis.com Discussion: https://postgr.es/m/E1q7j7Y-000z1H-Hr%40gemulon.postgresql.org Discussion: https://postgr.es/m/e44327179e5c9015c8dda67351c04da552066017.camel%40j-davis.com Reviewed-by: Greg Stark, Nathan Bossart, Noah Misch
This commit is contained in:
@ -24,6 +24,9 @@
|
||||
to hold, we can expect binary searches on the affected page to
|
||||
incorrectly guide index scans, resulting in wrong answers to SQL
|
||||
queries. If the structure appears to be valid, no error is raised.
|
||||
While these checking functions are run, the <xref
|
||||
linkend="guc-search-path"/> is temporarily changed to <literal>pg_catalog,
|
||||
pg_temp</literal>.
|
||||
</para>
|
||||
<para>
|
||||
Verification is performed using the same procedures as those used by
|
||||
|
@ -95,7 +95,9 @@
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Lastly, the following functions can be used:
|
||||
Lastly, the following functions can be used (while these functions run,
|
||||
<xref linkend="guc-search-path"/> is temporarily changed to
|
||||
<literal>pg_catalog, pg_temp</literal>):
|
||||
<simplelist>
|
||||
<member>
|
||||
<function>brin_summarize_new_values(regclass)</function>
|
||||
|
@ -205,6 +205,12 @@ ANALYZE [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] [ <r
|
||||
(This will not be sufficient if there is heavy update activity.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
While <command>ANALYZE</command> is running, the <xref
|
||||
linkend="guc-search-path"/> is temporarily changed to <literal>pg_catalog,
|
||||
pg_temp</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<command>ANALYZE</command>
|
||||
requires only a read lock on the target table, so it can run in
|
||||
|
@ -153,6 +153,12 @@ CLUSTER [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] [ <r
|
||||
information.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
While <command>CLUSTER</command> is running, the <xref
|
||||
linkend="guc-search-path"/> is temporarily changed to <literal>pg_catalog,
|
||||
pg_temp</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
When an index scan is used, a temporary copy of the table is created that
|
||||
contains the table data in the index order. Temporary copies of each
|
||||
|
@ -789,6 +789,12 @@ Indexes:
|
||||
the table to generate statistics for these indexes.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
While <command>CREATE INDEX</command> is running, the <xref
|
||||
linkend="guc-search-path"/> is temporarily changed to <literal>pg_catalog,
|
||||
pg_temp</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
For most index methods, the speed of creating an index is
|
||||
dependent on the setting of <xref linkend="guc-maintenance-work-mem"/>.
|
||||
|
@ -98,6 +98,12 @@ REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] <replaceable class="parameter">name</
|
||||
will be ordered that way; but <command>REFRESH MATERIALIZED
|
||||
VIEW</command> does not guarantee to preserve that ordering.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
While <command>REFRESH MATERIALIZED VIEW</command> is running, the <xref
|
||||
linkend="guc-search-path"/> is temporarily changed to <literal>pg_catalog,
|
||||
pg_temp</literal>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
|
@ -291,6 +291,12 @@ REINDEX [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] { DA
|
||||
into expensive sequential scans.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
While <command>REINDEX</command> is running, the <xref
|
||||
linkend="guc-search-path"/> is temporarily changed to <literal>pg_catalog,
|
||||
pg_temp</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Reindexing a single index or table requires being the owner of that
|
||||
index or table. Reindexing a schema or database requires being the
|
||||
|
@ -443,6 +443,12 @@ VACUUM [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] [ <re
|
||||
does not have permission to vacuum.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
While <command>VACUUM</command> is running, the <xref
|
||||
linkend="guc-search-path"/> is temporarily changed to <literal>pg_catalog,
|
||||
pg_temp</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<command>VACUUM</command> cannot be executed inside a transaction block.
|
||||
</para>
|
||||
|
Reference in New Issue
Block a user