1
0
mirror of https://github.com/postgrespro/pg_probackup.git synced 2024-11-28 09:33:54 +02:00

Detect ptrack support and remove disable ptrack option.

This commit is contained in:
stalkerg 2016-10-18 16:25:13 +03:00
parent cd9a119020
commit 8daffeeb6d
4 changed files with 22 additions and 6 deletions

View File

@ -65,6 +65,7 @@ static bool pg_is_standby(void);
static void get_lsn(PGconn *conn, PGresult *res, XLogRecPtr *lsn, bool stop_backup);
static void get_xid(PGresult *res, uint32 *xid);
static void pg_ptrack_clear(void);
static bool pg_ptrack_support(void);
static char *pg_ptrack_get_and_clear(Oid tablespace_oid,
Oid db_oid,
Oid rel_oid,
@ -106,6 +107,7 @@ do_backup_database(parray *backup_list, pgBackupOption bkupopt)
pthread_t backup_threads[num_threads];
pthread_t stream_thread;
backup_files_args *backup_threads_args[num_threads];
bool is_ptrack_support;
/* repack the options */
@ -131,6 +133,10 @@ do_backup_database(parray *backup_list, pgBackupOption bkupopt)
*/
current.tli = get_current_timeline(false);
is_ptrack_support = pg_ptrack_support();
if (current.backup_mode == BACKUP_MODE_DIFF_PTRACK && !is_ptrack_support)
elog(ERROR, "Current Postgres instance is not support ptrack");
/*
* In differential backup mode, check if there is an already-validated
* full backup on current timeline.
@ -148,7 +154,7 @@ do_backup_database(parray *backup_list, pgBackupOption bkupopt)
}
/* clear ptrack files for FULL and DIFF backup */
if (current.backup_mode != BACKUP_MODE_DIFF_PTRACK && !disable_ptrack_clear)
if (current.backup_mode != BACKUP_MODE_DIFF_PTRACK && is_ptrack_support)
pg_ptrack_clear();
/* notify start of backup to PostgreSQL server */
@ -635,6 +641,21 @@ pg_start_backup(const char *label, bool smooth, pgBackup *backup)
PQclear(res);
}
static bool
pg_ptrack_support(void)
{
PGresult *res_db;
reconnect();
res_db = execute("SELECT proname FROM pg_proc WHERE proname='pg_ptrack_clear'", 0, NULL);
if (PQntuples(res_db) == 0)
{
PQclear(res_db);
disconnect();
return false;
}
return true;
}
static void
pg_ptrack_clear(void)
{

View File

@ -26,7 +26,6 @@ Backup options:
--validate validate backup after taking it
--keep-data-generations=N keep GENERATION of full data backup
--keep-data-days=DAY keep enough data backup to recover to DAY days age
--disable-ptrack-clear disable clear ptrack for postgres without ptrack
--backup-pg-log start backup pg_log directory
--from-replica use non exclusive start backup for replica

View File

@ -37,7 +37,6 @@ static int keep_data_days = KEEP_INFINITE;
int num_threads = 1;
bool stream_wal = false;
bool from_replica = false;
bool disable_ptrack_clear = false;
static bool backup_logs = false;
static bool backup_validate = false;
bool progress = false;
@ -66,7 +65,6 @@ static pgut_option options[] =
{ 'b', 8, "stream", &stream_wal },
{ 'b', 11, "progress", &progress },
/* backup options */
{ 'b', 9, "disable-ptrack-clear", &disable_ptrack_clear },
{ 'b', 10, "backup-pg-log", &backup_logs },
{ 'f', 'b', "backup-mode", opt_backup_mode, SOURCE_ENV },
{ 'b', 'C', "smooth-checkpoint", &smooth_checkpoint, SOURCE_ENV },
@ -255,7 +253,6 @@ pgut_help(bool details)
printf(_(" --validate validate backup after taking it\n"));
printf(_(" --keep-data-generations=N keep GENERATION of full data backup\n"));
printf(_(" --keep-data-days=DAY keep enough data backup to recover to DAY days age\n"));
printf(_(" --disable-ptrack-clear disable clear ptrack for postgres without ptrack\n"));
printf(_(" --backup-pg-log start backup pg_log directory\n"));
printf(_(" --from-replica use non exclusive start backup for replica\n"));
printf(_("\nRestore options:\n"));

View File

@ -213,7 +213,6 @@ extern parray *backup_files_list;
extern int num_threads;
extern bool stream_wal;
extern bool from_replica;
extern bool disable_ptrack_clear;
extern bool progress;
/* in backup.c */