Set synchronous_commit to off for current session

Forward-ported from 2.x; need to verify it makes sense.
This commit is contained in:
Ian Barwick
2015-02-27 11:40:57 +09:00
parent e2c2f97307
commit 63c416bb76
3 changed files with 38 additions and 0 deletions

View File

@@ -804,3 +804,29 @@ stop_backup(PGconn *conn, char *last_wal_segment)
return true;
}
bool
set_config_bool(PGconn *conn, const char *config_param, bool state)
{
char sqlquery[QUERY_STR_LEN];
PGresult *res;
sqlquery_snprintf(sqlquery,
"SET %s TO %s",
config_param,
state ? "TRUE" : "FALSE");
res = PQexec(conn, sqlquery);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
log_err("Unable to set '%s': %s\n", config_param, PQerrorMessage(conn));
PQclear(res);
return false;
}
PQclear(res);
return true;
}

View File

@@ -57,5 +57,6 @@ bool create_replication_slot(PGconn *conn, char *slot_name);
bool start_backup(PGconn *conn, char *first_wal_segment);
bool stop_backup(PGconn *conn, char *last_wal_segment);
bool set_config_bool(PGconn *conn, const char *config_param, bool state);
#endif

View File

@@ -1114,6 +1114,17 @@ do_standby_clone(void)
if(runtime_options.rsync_only)
{
/*
* From pg 9.1 default is to wait for a sync standby to ack, avoid that by
* turning off sync rep for this session
*/
if(set_config_bool(primary_conn, "synchronous_commit", false) == false)
{
PQfinish(primary_conn);
exit(ERR_BAD_CONFIG);
}
if(start_backup(primary_conn, first_wal_segment) == false)
{
r = ERR_BAD_BASEBACKUP;