bool got_ident = false;
bool got_index = false;
bool got_toast = false;
+ bool got_large_object = false;
bool got_date_is_int = false;
bool got_float8_pass_by_value = false;
bool got_data_checksum_version = false;
cluster->controldata.toast = str2uint(p);
got_toast = true;
}
+ else if ((p = strstr(bufin, "Size of a large-object chunk:")) != NULL)
+ {
+ p = strchr(p, ':');
+
+ if (p == NULL || strlen(p) <= 1)
+ pg_fatal("%d: controldata retrieval problem\n", __LINE__);
+
+ p++; /* removing ':' char */
+ cluster->controldata.large_object = str2uint(p);
+ got_large_object = true;
+ }
else if ((p = strstr(bufin, "Date/time type storage:")) != NULL)
{
p = strchr(p, ':');
!got_tli ||
!got_align || !got_blocksz || !got_largesz || !got_walsz ||
!got_walseg || !got_ident || !got_index || !got_toast ||
+ (!got_large_object &&
+ cluster->controldata.cat_ver >= LARGE_OBJECT_SIZE_PG_CONTROL_VER) ||
!got_date_is_int || !got_float8_pass_by_value || !got_data_checksum_version)
{
pg_log(PG_REPORT,
if (!got_toast)
pg_log(PG_REPORT, " maximum TOAST chunk size\n");
+ if (!got_large_object &&
+ cluster->controldata.cat_ver >= LARGE_OBJECT_SIZE_PG_CONTROL_VER)
+ pg_log(PG_REPORT, " large-object chunk size\n");
+
if (!got_date_is_int)
pg_log(PG_REPORT, " dates/times are integers?\n");
if (oldctrl->toast == 0 || oldctrl->toast != newctrl->toast)
pg_fatal("old and new pg_controldata maximum TOAST chunk sizes are invalid or do not match\n");
+ if (oldctrl->large_object == 0 || oldctrl->large_object != newctrl->large_object)
+ pg_fatal("old and new pg_controldata large-object chunk sizes are invalid or do not match\n");
+
if (oldctrl->date_is_int != newctrl->date_is_int)
pg_fatal("old and new pg_controldata date/time storage types do not match\n");
*/
#define MULTIXACT_FORMATCHANGE_CAT_VER 201301231
+/*
+ * large object chunk size added to pg_controldata,
+ * commit 5f93c37805e7485488480916b4585e098d3cc883
+ */
+#define LARGE_OBJECT_SIZE_PG_CONTROL_VER 942
+
/*
* Each relation is represented by a relinfo structure.
*/
uint32 ident;
uint32 index;
uint32 toast;
+ uint32 large_object;
bool date_is_int;
bool float8_pass_by_value;
bool data_checksum_version;