@@ -217,19 +217,29 @@ get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo)
217217 * Check if ptrack is enabled in target instance
218218 */
219219bool
220- pg_ptrack_enable (PGconn * backup_conn )
220+ pg_ptrack_enable (PGconn * backup_conn , int ptrack_version_num )
221221{
222222 PGresult * res_db ;
223+ bool result = false;
223224
224- res_db = pgut_execute (backup_conn , "SHOW ptrack_enable" , 0 , NULL );
225-
226- if (strcmp (PQgetvalue (res_db , 0 , 0 ), "on" ) != 0 )
225+ if (ptrack_version_num < 20 )
227226 {
228- PQclear (res_db );
229- return false;
227+ res_db = pgut_execute (backup_conn , "SHOW ptrack_enable" , 0 , NULL );
228+ result = strcmp (PQgetvalue (res_db , 0 , 0 ), "on" ) == 0 ;
229+ }
230+ else if (ptrack_version_num == 20 )
231+ {
232+ res_db = pgut_execute (backup_conn , "SHOW ptrack_map_size" , 0 , NULL );
233+ result = strcmp (PQgetvalue (res_db , 0 , 0 ), "0" ) != 0 ;
234+ }
235+ else
236+ {
237+ res_db = pgut_execute (backup_conn , "SHOW ptrack.map_size" , 0 , NULL );
238+ result = strcmp (PQgetvalue (res_db , 0 , 0 ), "0" ) != 0 ;
230239 }
240+
231241 PQclear (res_db );
232- return true ;
242+ return result ;
233243}
234244
235245
@@ -459,7 +469,11 @@ get_last_ptrack_lsn(PGconn *backup_conn, PGNodeInfo *nodeInfo)
459469 {
460470 char query [128 ];
461471
462- sprintf (query , "SELECT %s.pg_ptrack_control_lsn()" , nodeInfo -> ptrack_schema );
472+ if (nodeInfo -> ptrack_version_num == 20 )
473+ sprintf (query , "SELECT %s.pg_ptrack_control_lsn()" , nodeInfo -> ptrack_schema );
474+ else
475+ sprintf (query , "SELECT %s.ptrack_init_lsn()" , nodeInfo -> ptrack_schema );
476+
463477 res = pgut_execute (backup_conn , query , 0 , NULL );
464478 }
465479
@@ -526,7 +540,10 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
526540 if (!ptrack_schema )
527541 elog (ERROR , "Schema name of ptrack extension is missing" );
528542
529- sprintf (query , "SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)" , ptrack_schema );
543+ if (ptrack_version_num == 20 )
544+ sprintf (query , "SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)" , ptrack_schema );
545+ else
546+ sprintf (query , "SELECT %s.ptrack_get_block($1, $2, $3, $4)" , ptrack_schema );
530547
531548 res = pgut_execute_parallel (arguments -> conn ,
532549 arguments -> cancel_conn ,
@@ -566,30 +583,12 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
566583 * ----------------------------
567584 */
568585
569- /*
570- * Check if ptrack is enabled in target instance
571- */
572- bool
573- pg_ptrack_enable2 (PGconn * backup_conn )
574- {
575- PGresult * res_db ;
576-
577- res_db = pgut_execute (backup_conn , "SHOW ptrack.map_size" , 0 , NULL );
578-
579- if (strcmp (PQgetvalue (res_db , 0 , 0 ), "0" ) == 0 )
580- {
581- PQclear (res_db );
582- return false;
583- }
584- PQclear (res_db );
585- return true;
586- }
587-
588586/*
589587 * Fetch a list of changed files with their ptrack maps.
590588 */
591589parray *
592- pg_ptrack_get_pagemapset (PGconn * backup_conn , const char * ptrack_schema , XLogRecPtr lsn )
590+ pg_ptrack_get_pagemapset (PGconn * backup_conn , const char * ptrack_schema ,
591+ int ptrack_version_num , XLogRecPtr lsn )
593592{
594593 PGresult * res ;
595594 char lsn_buf [17 + 1 ];
@@ -604,8 +603,12 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
604603 if (!ptrack_schema )
605604 elog (ERROR , "Schema name of ptrack extension is missing" );
606605
607- sprintf (query , "SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1" ,
608- ptrack_schema );
606+ if (ptrack_version_num == 20 )
607+ sprintf (query , "SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1" ,
608+ ptrack_schema );
609+ else
610+ sprintf (query , "SELECT path, pagemap FROM %s.ptrack_get_pagemapset($1) ORDER BY 1" ,
611+ ptrack_schema );
609612
610613 res = pgut_execute (backup_conn , query , 1 , (const char * * ) params );
611614 pfree (params [0 ]);
@@ -647,16 +650,18 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
647650 */
648651void
649652make_pagemap_from_ptrack_2 (parray * files ,
650- PGconn * backup_conn ,
651- const char * ptrack_schema ,
652- XLogRecPtr lsn )
653+ PGconn * backup_conn ,
654+ const char * ptrack_schema ,
655+ int ptrack_version_num ,
656+ XLogRecPtr lsn )
653657{
654658 parray * filemaps ;
655659 int file_i = 0 ;
656660 page_map_entry * dummy_map = NULL ;
657661
658662 /* Receive all available ptrack bitmaps at once */
659- filemaps = pg_ptrack_get_pagemapset (backup_conn , ptrack_schema , lsn );
663+ filemaps = pg_ptrack_get_pagemapset (backup_conn , ptrack_schema ,
664+ ptrack_version_num , lsn );
660665
661666 if (filemaps != NULL )
662667 parray_qsort (filemaps , pgFileMapComparePath );
0 commit comments