Add function repmgr_get_primary_conninfo()

This commit is contained in:
Ian Barwick
2015-01-14 16:23:08 +09:00
parent 4b7fb70de3
commit fc6f5ddaa7
3 changed files with 39 additions and 0 deletions

View File

@@ -2201,6 +2201,21 @@ create_schema(PGconn *conn)
}
PQclear(res);
sqlquery_snprintf(sqlquery,
"CREATE OR REPLACE FUNCTION %s.repmgr_get_primary_conninfo() "
" RETURNS text "
" AS '$libdir/repmgr_funcs', 'repmgr_get_primary_conninfo' "
" LANGUAGE C STRICT ",
get_repmgr_schema_quoted(conn));
res = PQexec(conn, sqlquery);
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "Cannot create the function repmgr_get_primary_conninfo: %s\n",
PQerrorMessage(conn));
return false;
}
PQclear(res);
return true;
}

View File

@@ -9,6 +9,7 @@
#include "fmgr.h"
#include "access/xlog.h"
#include "miscadmin.h"
#include "replication/walreceiver.h"
#include "storage/ipc.h"
#include "storage/lwlock.h"
#include "storage/procarray.h"
@@ -57,6 +58,8 @@ Datum repmgr_get_last_updated(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(repmgr_update_last_updated);
PG_FUNCTION_INFO_V1(repmgr_get_last_updated);
Datum repmgr_get_primary_conninfo(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(repmgr_get_primary_conninfo);
/*
* Module load callback
@@ -230,3 +233,20 @@ repmgr_get_last_updated(PG_FUNCTION_ARGS)
PG_RETURN_TIMESTAMPTZ(last_updated);
}
/*
* get the `primary_conninfo` string used by walreceiver,
* which is the value parsed from recovery.conf at startup
*
* XXX is there a better way of doing this?
*/
Datum
repmgr_get_primary_conninfo(PG_FUNCTION_ARGS)
{
/* use volatile pointer to prevent code rearrangement */
volatile WalRcvData *walrcv = WalRcv;
PG_RETURN_TEXT_P(cstring_to_text((const char *)walrcv->conninfo));
}

View File

@@ -21,3 +21,7 @@ LANGUAGE C STRICT;
CREATE FUNCTION repmgr_get_last_updated() RETURNS TIMESTAMP WITH TIME ZONE
AS 'MODULE_PATHNAME', 'repmgr_get_last_updated'
LANGUAGE C STRICT;
CREATE FUNCTION repmgr_get_primary_conninfo() RETURNS TEXT
AS 'MODULE_PATHNAME', 'repmgr_get_primary_conninfo'
LANGUAGE C STRICT;