@@ -54,6 +54,7 @@ get_control_data(ClusterInfo *cluster, bool live_check)
5454 bool got_ident = false;
5555 bool got_index = false;
5656 bool got_toast = false;
57+ bool got_large_object = false;
5758 bool got_date_is_int = false;
5859 bool got_float8_pass_by_value = false;
5960 bool got_data_checksum_version = false;
@@ -357,6 +358,17 @@ get_control_data(ClusterInfo *cluster, bool live_check)
357358 cluster -> controldata .toast = str2uint (p );
358359 got_toast = true;
359360 }
361+ else if ((p = strstr (bufin , "Size of a large-object chunk:" )) != NULL )
362+ {
363+ p = strchr (p , ':' );
364+
365+ if (p == NULL || strlen (p ) <= 1 )
366+ pg_fatal ("%d: controldata retrieval problem\n" , __LINE__ );
367+
368+ p ++ ; /* removing ':' char */
369+ cluster -> controldata .large_object = str2uint (p );
370+ got_large_object = true;
371+ }
360372 else if ((p = strstr (bufin , "Date/time type storage:" )) != NULL )
361373 {
362374 p = strchr (p , ':' );
@@ -475,6 +487,8 @@ get_control_data(ClusterInfo *cluster, bool live_check)
475487 !got_tli ||
476488 !got_align || !got_blocksz || !got_largesz || !got_walsz ||
477489 !got_walseg || !got_ident || !got_index || !got_toast ||
490+ (!got_large_object &&
491+ cluster -> controldata .cat_ver >= LARGE_OBJECT_SIZE_PG_CONTROL_VER ) ||
478492 !got_date_is_int || !got_float8_pass_by_value || !got_data_checksum_version )
479493 {
480494 pg_log (PG_REPORT ,
@@ -527,6 +541,10 @@ get_control_data(ClusterInfo *cluster, bool live_check)
527541 if (!got_toast )
528542 pg_log (PG_REPORT , " maximum TOAST chunk size\n" );
529543
544+ if (!got_large_object &&
545+ cluster -> controldata .cat_ver >= LARGE_OBJECT_SIZE_PG_CONTROL_VER )
546+ pg_log (PG_REPORT , " large-object chunk size\n" );
547+
530548 if (!got_date_is_int )
531549 pg_log (PG_REPORT , " dates/times are integers?\n" );
532550
@@ -576,6 +594,9 @@ check_control_data(ControlData *oldctrl,
576594 if (oldctrl -> toast == 0 || oldctrl -> toast != newctrl -> toast )
577595 pg_fatal ("old and new pg_controldata maximum TOAST chunk sizes are invalid or do not match\n" );
578596
597+ if (oldctrl -> large_object == 0 || oldctrl -> large_object != newctrl -> large_object )
598+ pg_fatal ("old and new pg_controldata large-object chunk sizes are invalid or do not match\n" );
599+
579600 if (oldctrl -> date_is_int != newctrl -> date_is_int )
580601 pg_fatal ("old and new pg_controldata date/time storage types do not match\n" );
581602
0 commit comments