diff --git a/src/bin/pg_probackup/backup.cpp b/src/bin/pg_probackup/backup.cpp index 886983735..8d147ed54 100644 --- a/src/bin/pg_probackup/backup.cpp +++ b/src/bin/pg_probackup/backup.cpp @@ -1177,7 +1177,7 @@ pg_start_backup(const char *label, bool smooth, pgBackup *backup, securec_check_for_sscanf_s(ret, 2, "\0", "\0"); repslotLsn = ((uint64) lsn_hi )<< 32 | lsn_lo; startLsn = Min(startLsn, repslotLsn); - + char* slotname = pg_strdup(PQgetvalue(res, i, 0)); parray_append(logical_replslot, slotname); } diff --git a/src/bin/pg_probackup/ptrack.cpp b/src/bin/pg_probackup/ptrack.cpp index a9dd5158a..f0fae365d 100644 --- a/src/bin/pg_probackup/ptrack.cpp +++ b/src/bin/pg_probackup/ptrack.cpp @@ -101,10 +101,27 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, XLogRecPtr lsn) PQclear(res); elog(INFO, "change bitmap end lsn location is %s", params[1]); - res = pgut_execute(backup_conn, - "SELECT path,changed_block_number,changed_block_list " - "FROM pg_cbm_get_changed_block($1, $2)", - 2, (const char **) params); + const char *query = "SELECT path,changed_block_number,changed_block_list FROM \ + pg_cbm_get_changed_block($1, $2)"; + + + res = pgut_execute_extended(backup_conn, query, + 2, (const char **) params, true, true); + + switch (PQresultStatus(res)) + { + case PGRES_TUPLES_OK: + case PGRES_COMMAND_OK: + case PGRES_COPY_IN: + break; + default: + elog(ERROR, "query failed: %s query was: %s\n" + "Please check the replication slots, if it has slots useless," + "delete it and try again.", + PQerrorMessage(backup_conn), query); + break; + } + pfree(params[0]); pfree(params[1]);