Add function is_replication_role()

This commit is contained in:
Ian Barwick
2019-10-17 17:13:18 +09:00
parent f45b9d7024
commit 52abe309df
2 changed files with 47 additions and 1 deletions

View File

@@ -354,6 +354,51 @@ is_superuser_connection(PGconn *conn, t_connection_user *userinfo)
}
bool
is_replication_role(PGconn *conn, char *rolname)
{
PQExpBufferData query;
PGresult *res;
bool is_replication_role = false;
initPQExpBuffer(&query);
appendPQExpBufferStr(&query,
" SELECT rolreplication "
" FROM pg_catalog.pg_authid "
" WHERE rolname = ");
if (rolname != NULL)
{
appendPQExpBuffer(&query,
"'%s'",
rolname);
}
else
{
appendPQExpBufferStr(&query,
"CURRENT_USER");
}
res = PQexec(conn, query.data);
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
log_db_error(conn, query.data,
_("is_replication_role(): unable to query user roles"));
}
else
{
is_replication_role = atobool(PQgetvalue(res, 0, 0));
}
termPQExpBuffer(&query);
PQclear(res);
return is_replication_role;
}
bool
connection_has_pg_settings(PGconn *conn)
{

View File

@@ -437,7 +437,8 @@ PGconn *establish_primary_db_connection(PGconn *conn,
PGconn *get_primary_connection(PGconn *standby_conn, int *primary_id, char *primary_conninfo_out);
PGconn *get_primary_connection_quiet(PGconn *standby_conn, int *primary_id, char *primary_conninfo_out);
bool is_superuser_connection(PGconn *conn, t_connection_user *userinfo);
bool is_superuser_connection(PGconn *conn, t_connection_user *userinfo);\
bool is_replication_role(PGconn *conn, char *rolname);
bool connection_has_pg_settings(PGconn *conn);
void close_connection(PGconn **conn);