@@ -217,19 +217,29 @@ get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo)
217
217
* Check if ptrack is enabled in target instance
218
218
*/
219
219
bool
220
- pg_ptrack_enable (PGconn * backup_conn )
220
+ pg_ptrack_enable (PGconn * backup_conn , int ptrack_version_num )
221
221
{
222
222
PGresult * res_db ;
223
+ bool result = false;
223
224
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 )
227
226
{
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 ;
230
239
}
240
+
231
241
PQclear (res_db );
232
- return true ;
242
+ return result ;
233
243
}
234
244
235
245
@@ -459,7 +469,11 @@ get_last_ptrack_lsn(PGconn *backup_conn, PGNodeInfo *nodeInfo)
459
469
{
460
470
char query [128 ];
461
471
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
+
463
477
res = pgut_execute (backup_conn , query , 0 , NULL );
464
478
}
465
479
@@ -526,7 +540,10 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
526
540
if (!ptrack_schema )
527
541
elog (ERROR , "Schema name of ptrack extension is missing" );
528
542
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 );
530
547
531
548
res = pgut_execute_parallel (arguments -> conn ,
532
549
arguments -> cancel_conn ,
@@ -566,30 +583,12 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
566
583
* ----------------------------
567
584
*/
568
585
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
-
588
586
/*
589
587
* Fetch a list of changed files with their ptrack maps.
590
588
*/
591
589
parray *
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 )
593
592
{
594
593
PGresult * res ;
595
594
char lsn_buf [17 + 1 ];
@@ -604,8 +603,12 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
604
603
if (!ptrack_schema )
605
604
elog (ERROR , "Schema name of ptrack extension is missing" );
606
605
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 );
609
612
610
613
res = pgut_execute (backup_conn , query , 1 , (const char * * ) params );
611
614
pfree (params [0 ]);
@@ -647,16 +650,18 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
647
650
*/
648
651
void
649
652
make_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 )
653
657
{
654
658
parray * filemaps ;
655
659
int file_i = 0 ;
656
660
page_map_entry * dummy_map = NULL ;
657
661
658
662
/* 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 );
660
665
661
666
if (filemaps != NULL )
662
667
parray_qsort (filemaps , pgFileMapComparePath );
0 commit comments