@@ -212,19 +212,29 @@ get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo)
212212 * Check if ptrack is enabled in target instance
213213 */
214214bool
215- pg_ptrack_enable (PGconn * backup_conn )
215+ pg_ptrack_enable (PGconn * backup_conn , int ptrack_version_num )
216216{
217217 PGresult * res_db ;
218+ bool result = false;
218219
219- res_db = pgut_execute (backup_conn , "SHOW ptrack_enable" , 0 , NULL );
220-
221- if (strcmp (PQgetvalue (res_db , 0 , 0 ), "on" ) != 0 )
220+ if (ptrack_version_num < 20 )
222221 {
223- PQclear (res_db );
224- return false;
222+ res_db = pgut_execute (backup_conn , "SHOW ptrack_enable" , 0 , NULL );
223+ result = strcmp (PQgetvalue (res_db , 0 , 0 ), "on" ) == 0 ;
224+ }
225+ else if (ptrack_version_num == 20 )
226+ {
227+ res_db = pgut_execute (backup_conn , "SHOW ptrack_map_size" , 0 , NULL );
228+ result = strcmp (PQgetvalue (res_db , 0 , 0 ), "0" ) != 0 ;
229+ }
230+ else
231+ {
232+ res_db = pgut_execute (backup_conn , "SHOW ptrack.map_size" , 0 , NULL );
233+ result = strcmp (PQgetvalue (res_db , 0 , 0 ), "0" ) != 0 ;
225234 }
235+
226236 PQclear (res_db );
227- return true ;
237+ return result ;
228238}
229239
230240
@@ -454,7 +464,11 @@ get_last_ptrack_lsn(PGconn *backup_conn, PGNodeInfo *nodeInfo)
454464 {
455465 char query [128 ];
456466
457- sprintf (query , "SELECT %s.pg_ptrack_control_lsn()" , nodeInfo -> ptrack_schema );
467+ if (nodeInfo -> ptrack_version_num == 20 )
468+ sprintf (query , "SELECT %s.pg_ptrack_control_lsn()" , nodeInfo -> ptrack_schema );
469+ else
470+ sprintf (query , "SELECT %s.ptrack_init_lsn()" , nodeInfo -> ptrack_schema );
471+
458472 res = pgut_execute (backup_conn , query , 0 , NULL );
459473 }
460474
@@ -521,7 +535,10 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
521535 if (!ptrack_schema )
522536 elog (ERROR , "Schema name of ptrack extension is missing" );
523537
524- sprintf (query , "SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)" , ptrack_schema );
538+ if (ptrack_version_num == 20 )
539+ sprintf (query , "SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)" , ptrack_schema );
540+ else
541+ sprintf (query , "SELECT %s.ptrack_get_block($1, $2, $3, $4)" , ptrack_schema );
525542
526543 res = pgut_execute_parallel (arguments -> conn ,
527544 arguments -> cancel_conn ,
@@ -561,30 +578,12 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
561578 * ----------------------------
562579 */
563580
564- /*
565- * Check if ptrack is enabled in target instance
566- */
567- bool
568- pg_ptrack_enable2 (PGconn * backup_conn )
569- {
570- PGresult * res_db ;
571-
572- res_db = pgut_execute (backup_conn , "SHOW ptrack.map_size" , 0 , NULL );
573-
574- if (strcmp (PQgetvalue (res_db , 0 , 0 ), "0" ) == 0 )
575- {
576- PQclear (res_db );
577- return false;
578- }
579- PQclear (res_db );
580- return true;
581- }
582-
583581/*
584582 * Fetch a list of changed files with their ptrack maps.
585583 */
586584parray *
587- pg_ptrack_get_pagemapset (PGconn * backup_conn , const char * ptrack_schema , XLogRecPtr lsn )
585+ pg_ptrack_get_pagemapset (PGconn * backup_conn , const char * ptrack_schema ,
586+ int ptrack_version_num , XLogRecPtr lsn )
588587{
589588 PGresult * res ;
590589 char lsn_buf [17 + 1 ];
@@ -599,8 +598,12 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
599598 if (!ptrack_schema )
600599 elog (ERROR , "Schema name of ptrack extension is missing" );
601600
602- sprintf (query , "SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1" ,
603- ptrack_schema );
601+ if (ptrack_version_num == 20 )
602+ sprintf (query , "SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1" ,
603+ ptrack_schema );
604+ else
605+ sprintf (query , "SELECT path, pagemap FROM %s.ptrack_get_pagemapset($1) ORDER BY 1" ,
606+ ptrack_schema );
604607
605608 res = pgut_execute (backup_conn , query , 1 , (const char * * ) params );
606609 pfree (params [0 ]);
@@ -642,16 +645,18 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
642645 */
643646void
644647make_pagemap_from_ptrack_2 (parray * files ,
645- PGconn * backup_conn ,
646- const char * ptrack_schema ,
647- XLogRecPtr lsn )
648+ PGconn * backup_conn ,
649+ const char * ptrack_schema ,
650+ int ptrack_version_num ,
651+ XLogRecPtr lsn )
648652{
649653 parray * filemaps ;
650654 int file_i = 0 ;
651655 page_map_entry * dummy_map = NULL ;
652656
653657 /* Receive all available ptrack bitmaps at once */
654- filemaps = pg_ptrack_get_pagemapset (backup_conn , ptrack_schema , lsn );
658+ filemaps = pg_ptrack_get_pagemapset (backup_conn , ptrack_schema ,
659+ ptrack_version_num , lsn );
655660
656661 if (filemaps != NULL )
657662 parray_qsort (filemaps , pgFileMapComparePath );
0 commit comments