mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Add vacuum_truncate reloption.
vacuum_truncate controls whether vacuum tries to truncate off any empty pages at the end of the table. Previously vacuum always tried to do the truncation. However, the truncation could cause some problems; for example, ACCESS EXCLUSIVE lock needs to be taken on the table during the truncation and can cause the query cancellation on the standby even if hot_standby_feedback is true. Setting this reloption to false can be helpful to avoid such problems. Author: Tsunakawa Takayuki Reviewed-By: Julien Rouhaud, Masahiko Sawada, Michael Paquier, Kirk Jamison and Fujii Masao Discussion: https://postgr.es/m/CAHGQGwE5UqFqSq1=kV3QtTUtXphTdyHA-8rAj4A=Y+e4kyp3BQ@mail.gmail.com
This commit is contained in:
@ -89,6 +89,11 @@
|
||||
* Setting parallel_workers is safe, since it acts the same as
|
||||
* max_parallel_workers_per_gather which is a USERSET parameter that doesn't
|
||||
* affect existing plans or queries.
|
||||
*
|
||||
* vacuum_truncate can be set at ShareUpdateExclusiveLock because it
|
||||
* is only used during VACUUM, which uses a ShareUpdateExclusiveLock,
|
||||
* so the VACUUM will not be affected by in-flight changes. Changing its
|
||||
* value has no affect until the next VACUUM, so no need for stronger lock.
|
||||
*/
|
||||
|
||||
static relopt_bool boolRelOpts[] =
|
||||
@ -147,6 +152,15 @@ static relopt_bool boolRelOpts[] =
|
||||
},
|
||||
true
|
||||
},
|
||||
{
|
||||
{
|
||||
"vacuum_truncate",
|
||||
"Enables vacuum to truncate empty pages at the end of this table",
|
||||
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST,
|
||||
ShareUpdateExclusiveLock
|
||||
},
|
||||
true
|
||||
},
|
||||
/* list terminator */
|
||||
{{NULL}}
|
||||
};
|
||||
@ -1399,7 +1413,9 @@ default_reloptions(Datum reloptions, bool validate, relopt_kind kind)
|
||||
{"vacuum_cleanup_index_scale_factor", RELOPT_TYPE_REAL,
|
||||
offsetof(StdRdOptions, vacuum_cleanup_index_scale_factor)},
|
||||
{"vacuum_index_cleanup", RELOPT_TYPE_BOOL,
|
||||
offsetof(StdRdOptions, vacuum_index_cleanup)}
|
||||
offsetof(StdRdOptions, vacuum_index_cleanup)},
|
||||
{"vacuum_truncate", RELOPT_TYPE_BOOL,
|
||||
offsetof(StdRdOptions, vacuum_truncate)}
|
||||
};
|
||||
|
||||
options = parseRelOptions(reloptions, validate, kind, &numoptions);
|
||||
|
Reference in New Issue
Block a user