mirror of
https://github.com/postgres/postgres.git
synced 2025-11-18 02:02:55 +03:00
Move SLRU_PAGES_PER_SEGMENT to pg_config_manual.h
It seems plausible that someone might want to experiment with different values. The pressing reason though is that I'm reviewing a patch that requires pg_upgrade to manipulate SLRU files. That patch needs to access SLRU_PAGES_PER_SEGMENT from pg_upgrade code, and slru.h, where SLRU_PAGES_PER_SEGMENT is currently defined, cannot be included from frontend code. Moving it to pg_config_manual.h makes it accessible. Now that it's a little more likely that someone might change SLRU_PAGES_PER_SEGMENT, add a cluster compatibility check for it. Bump catalog version because of the new field in the control file. Reviewed-by: Daniel Gustafsson <daniel@yesql.se> Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de> Discussion: https://www.postgresql.org/message-id/c7a4ea90-9f7b-4953-81be-b3fcb47db057@iki.fi
This commit is contained in:
@@ -4271,6 +4271,7 @@ WriteControlFile(void)
|
||||
|
||||
ControlFile->blcksz = BLCKSZ;
|
||||
ControlFile->relseg_size = RELSEG_SIZE;
|
||||
ControlFile->slru_pages_per_segment = SLRU_PAGES_PER_SEGMENT;
|
||||
ControlFile->xlog_blcksz = XLOG_BLCKSZ;
|
||||
ControlFile->xlog_seg_size = wal_segment_size;
|
||||
|
||||
@@ -4490,6 +4491,16 @@ ReadControlFile(void)
|
||||
"RELSEG_SIZE", ControlFile->relseg_size,
|
||||
"RELSEG_SIZE", RELSEG_SIZE),
|
||||
errhint("It looks like you need to recompile or initdb.")));
|
||||
if (ControlFile->slru_pages_per_segment != SLRU_PAGES_PER_SEGMENT)
|
||||
ereport(FATAL,
|
||||
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
||||
errmsg("database files are incompatible with server"),
|
||||
/* translator: %s is a variable name and %d is its value */
|
||||
errdetail("The database cluster was initialized with %s %d,"
|
||||
" but the server was compiled with %s %d.",
|
||||
"SLRU_PAGES_PER_SEGMENT", ControlFile->slru_pages_per_segment,
|
||||
"SLRU_PAGES_PER_SEGMENT", SLRU_PAGES_PER_SEGMENT),
|
||||
errhint("It looks like you need to recompile or initdb.")));
|
||||
if (ControlFile->xlog_blcksz != XLOG_BLCKSZ)
|
||||
ereport(FATAL,
|
||||
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
||||
|
||||
Reference in New Issue
Block a user