Skip to content

Commit

Permalink
Add guc_setted_typed() function to allow
Browse files Browse the repository at this point in the history
wal_keep_segmeents to be checked as an integer instead
of text

Patch by Jay Taylor
  • Loading branch information
Jaime Casanova authored and Jaime Casanova committed Dec 19, 2013
1 parent 4931339 commit a1f4285
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
34 changes: 34 additions & 0 deletions dbutils.c
Expand Up @@ -250,6 +250,40 @@ guc_setted(PGconn *conn, const char *parameter, const char *op,
return true;
}

/**
* Just like guc_setted except with an extra parameter containing the name of
* the pg datatype so that the comparison can be done properly.
*/
bool
guc_setted_typed(PGconn *conn, const char *parameter, const char *op,
const char *value, const char *datatype)
{
PGresult *res;
char sqlquery[QUERY_STR_LEN];

sqlquery_snprintf(sqlquery, "SELECT true FROM pg_settings "
" WHERE name = '%s' AND setting::%s %s '%s'::%s",
parameter, datatype, op, value, datatype);

res = PQexec(conn, sqlquery);
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
log_err(_("GUC setting check PQexec failed: %s"),
PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(ERR_DB_QUERY);
}
if (PQntuples(res) == 0)
{
PQclear(res);
return false;
}
PQclear(res);

return true;
}


const char *
get_cluster_size(PGconn *conn)
Expand Down
2 changes: 2 additions & 0 deletions dbutils.h
Expand Up @@ -32,6 +32,8 @@ bool is_pgup(PGconn *conn, int timeout);
char *pg_version(PGconn *conn, char* major_version);
bool guc_setted(PGconn *conn, const char *parameter, const char *op,
const char *value);
bool guc_setted(PGconn *conn, const char *parameter, const char *op,
const char *value, const char *datatype);
const char *get_cluster_size(PGconn *conn);
PGconn *getMasterConnection(PGconn *standby_conn, char *schema, char *cluster,
int *master_id, char *master_conninfo_out);
Expand Down
2 changes: 1 addition & 1 deletion repmgr.c
Expand Up @@ -842,7 +842,7 @@ do_standby_clone(void)
log_err(_("%s needs parameter 'wal_level' to be set to 'hot_standby'\n"), progname);
exit(ERR_BAD_CONFIG);
}
if (!guc_setted(conn, "wal_keep_segments", ">=", runtime_options.wal_keep_segments))
if (!guc_setted_typed(conn, "wal_keep_segments", ">=", runtime_options.wal_keep_segments, "integer"))
{
PQfinish(conn);
log_err(_("%s needs parameter 'wal_keep_segments' to be set to %s or greater (see the '-w' option or edit the postgresql.conf of the PostgreSQL master.)\n"), progname, runtime_options.wal_keep_segments);
Expand Down

0 comments on commit a1f4285

Please sign in to comment.