mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
Include more status information in walsender results
Add the current xlog insert location to the response of IDENTIFY_SYSTEM, and adds result sets containing start and stop location of backups to BASE_BACKUP responses.
This commit is contained in:
@@ -742,15 +742,40 @@ static void
|
||||
BaseBackup()
|
||||
{
|
||||
PGresult *res;
|
||||
uint32 timeline;
|
||||
char current_path[MAXPGPATH];
|
||||
char escaped_label[MAXPGPATH];
|
||||
int i;
|
||||
char xlogstart[64];
|
||||
char xlogend[64];
|
||||
|
||||
/*
|
||||
* Connect in replication mode to the server
|
||||
*/
|
||||
conn = GetConnection();
|
||||
|
||||
/*
|
||||
* Run IDENFITY_SYSTEM so we can get the timeline
|
||||
*/
|
||||
res = PQexec(conn, "IDENTIFY_SYSTEM");
|
||||
if (PQresultStatus(res) != PGRES_TUPLES_OK)
|
||||
{
|
||||
fprintf(stderr, _("%s: could not identify system: %s\n"),
|
||||
progname, PQerrorMessage(conn));
|
||||
disconnect_and_exit(1);
|
||||
}
|
||||
if (PQntuples(res) != 1)
|
||||
{
|
||||
fprintf(stderr, _("%s: could not identify system, got %i rows\n"),
|
||||
progname, PQntuples(res));
|
||||
disconnect_and_exit(1);
|
||||
}
|
||||
timeline = atoi(PQgetvalue(res, 0, 1));
|
||||
PQclear(res);
|
||||
|
||||
/*
|
||||
* Start the actual backup
|
||||
*/
|
||||
PQescapeStringConn(conn, escaped_label, label, sizeof(escaped_label), &i);
|
||||
snprintf(current_path, sizeof(current_path), "BASE_BACKUP LABEL '%s' %s %s %s",
|
||||
escaped_label,
|
||||
@@ -766,7 +791,7 @@ BaseBackup()
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the header
|
||||
* Get the starting xlog position
|
||||
*/
|
||||
res = PQgetResult(conn);
|
||||
if (PQresultStatus(res) != PGRES_TUPLES_OK)
|
||||
@@ -775,6 +800,28 @@ BaseBackup()
|
||||
progname, PQerrorMessage(conn));
|
||||
disconnect_and_exit(1);
|
||||
}
|
||||
if (PQntuples(res) != 1)
|
||||
{
|
||||
fprintf(stderr, _("%s: no start point returned from server.\n"),
|
||||
progname);
|
||||
disconnect_and_exit(1);
|
||||
}
|
||||
strcpy(xlogstart, PQgetvalue(res, 0, 0));
|
||||
if (verbose && includewal)
|
||||
fprintf(stderr, "xlog start point: %s\n", xlogstart);
|
||||
PQclear(res);
|
||||
MemSet(xlogend, 0, sizeof(xlogend));
|
||||
|
||||
/*
|
||||
* Get the header
|
||||
*/
|
||||
res = PQgetResult(conn);
|
||||
if (PQresultStatus(res) != PGRES_TUPLES_OK)
|
||||
{
|
||||
fprintf(stderr, _("%s: could not get backup header: %s\n"),
|
||||
progname, PQerrorMessage(conn));
|
||||
disconnect_and_exit(1);
|
||||
}
|
||||
if (PQntuples(res) < 1)
|
||||
{
|
||||
fprintf(stderr, _("%s: no data returned from server.\n"), progname);
|
||||
@@ -828,6 +875,27 @@ BaseBackup()
|
||||
}
|
||||
PQclear(res);
|
||||
|
||||
/*
|
||||
* Get the stop position
|
||||
*/
|
||||
res = PQgetResult(conn);
|
||||
if (PQresultStatus(res) != PGRES_TUPLES_OK)
|
||||
{
|
||||
fprintf(stderr, _("%s: could not get end xlog position from server.\n"),
|
||||
progname);
|
||||
disconnect_and_exit(1);
|
||||
}
|
||||
if (PQntuples(res) != 1)
|
||||
{
|
||||
fprintf(stderr, _("%s: no end point returned from server.\n"),
|
||||
progname);
|
||||
disconnect_and_exit(1);
|
||||
}
|
||||
strcpy(xlogend, PQgetvalue(res, 0, 0));
|
||||
if (verbose && includewal)
|
||||
fprintf(stderr, "xlog end point: %s\n", xlogend);
|
||||
PQclear(res);
|
||||
|
||||
res = PQgetResult(conn);
|
||||
if (PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user