#include "postgres.h"#include "access/htup_details.h"#include "catalog/pg_type.h"#include "funcapi.h"#include "libpq/ip.h"#include "miscadmin.h"#include "pgstat.h"#include "utils/builtins.h"#include "utils/inet.h"#include "utils/timestamp.h"
Go to the source code of this file.
| Datum pg_backend_pid | ( | PG_FUNCTION_ARGS | ) |
Definition at line 788 of file pgstatfuncs.c.
References MyProcPid, and PG_RETURN_INT32.
{
PG_RETURN_INT32(MyProcPid);
}
| Datum pg_stat_clear_snapshot | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1649 of file pgstatfuncs.c.
References PG_RETURN_VOID, and pgstat_clear_snapshot().
{
pgstat_clear_snapshot();
PG_RETURN_VOID();
}
| Datum pg_stat_get_activity | ( | PG_FUNCTION_ARGS | ) |
Definition at line 507 of file pgstatfuncs.c.
References SockAddr::addr, BlessTupleDesc(), BoolGetDatum, BOOLOID, FuncCallContext::call_cntr, clean_ipv6_addr(), CreateTemplateTupleDesc(), CStringGetDatum, CStringGetTextDatum, DatumGetInt32, DirectFunctionCall1, GetUserId(), heap_form_tuple(), HeapTupleGetDatum, i, inet_in(), INETOID, Int32GetDatum, INT4OID, FuncCallContext::max_calls, memcmp(), MemoryContextSwitchTo(), MemSet, FuncCallContext::multi_call_memory_ctx, NI_NUMERICHOST, NI_NUMERICSERV, ObjectIdGetDatum, OIDOID, palloc0(), PG_ARGISNULL, PG_GETARG_INT32, pg_getnameinfo_all(), pgstat_fetch_stat_beentry(), pgstat_fetch_stat_numbackends(), SockAddr::salen, SRF_FIRSTCALL_INIT, SRF_IS_FIRSTCALL, SRF_PERCALL_SETUP, SRF_RETURN_DONE, SRF_RETURN_NEXT, PgBackendStatus::st_activity, PgBackendStatus::st_activity_start_timestamp, PgBackendStatus::st_appname, PgBackendStatus::st_clientaddr, PgBackendStatus::st_clienthostname, PgBackendStatus::st_databaseid, PgBackendStatus::st_proc_start_timestamp, PgBackendStatus::st_procpid, PgBackendStatus::st_state, PgBackendStatus::st_state_start_timestamp, PgBackendStatus::st_userid, PgBackendStatus::st_waiting, PgBackendStatus::st_xact_start_timestamp, STATE_DISABLED, STATE_FASTPATH, STATE_IDLE, STATE_IDLEINTRANSACTION, STATE_IDLEINTRANSACTION_ABORTED, STATE_RUNNING, STATE_UNDEFINED, superuser(), TEXTOID, TimestampTzGetDatum, TIMESTAMPTZOID, FuncCallContext::tuple_desc, TupleDescInitEntry(), FuncCallContext::user_fctx, and values.
{
FuncCallContext *funcctx;
if (SRF_IS_FIRSTCALL())
{
MemoryContext oldcontext;
TupleDesc tupdesc;
funcctx = SRF_FIRSTCALL_INIT();
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
tupdesc = CreateTemplateTupleDesc(14, false);
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "datid",
OIDOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "pid",
INT4OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 3, "usesysid",
OIDOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 4, "application_name",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 5, "state",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 6, "query",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 7, "waiting",
BOOLOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 8, "act_start",
TIMESTAMPTZOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 9, "query_start",
TIMESTAMPTZOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 10, "backend_start",
TIMESTAMPTZOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 11, "state_change",
TIMESTAMPTZOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 12, "client_addr",
INETOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 13, "client_hostname",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 14, "client_port",
INT4OID, -1, 0);
funcctx->tuple_desc = BlessTupleDesc(tupdesc);
funcctx->user_fctx = palloc0(sizeof(int));
if (PG_ARGISNULL(0))
{
/* Get all backends */
funcctx->max_calls = pgstat_fetch_stat_numbackends();
}
else
{
/*
* Get one backend - locate by pid.
*
* We lookup the backend early, so we can return zero rows if it
* doesn't exist, instead of returning a single row full of NULLs.
*/
int pid = PG_GETARG_INT32(0);
int i;
int n = pgstat_fetch_stat_numbackends();
for (i = 1; i <= n; i++)
{
PgBackendStatus *be = pgstat_fetch_stat_beentry(i);
if (be)
{
if (be->st_procpid == pid)
{
*(int *) (funcctx->user_fctx) = i;
break;
}
}
}
if (*(int *) (funcctx->user_fctx) == 0)
/* Pid not found, return zero rows */
funcctx->max_calls = 0;
else
funcctx->max_calls = 1;
}
MemoryContextSwitchTo(oldcontext);
}
/* stuff done on every call of the function */
funcctx = SRF_PERCALL_SETUP();
if (funcctx->call_cntr < funcctx->max_calls)
{
/* for each row */
Datum values[14];
bool nulls[14];
HeapTuple tuple;
PgBackendStatus *beentry;
SockAddr zero_clientaddr;
MemSet(values, 0, sizeof(values));
MemSet(nulls, 0, sizeof(nulls));
if (*(int *) (funcctx->user_fctx) > 0)
{
/* Get specific pid slot */
beentry = pgstat_fetch_stat_beentry(*(int *) (funcctx->user_fctx));
}
else
{
/* Get the next one in the list */
beentry = pgstat_fetch_stat_beentry(funcctx->call_cntr + 1); /* 1-based index */
}
if (!beentry)
{
int i;
for (i = 0; i < sizeof(nulls) / sizeof(nulls[0]); i++)
nulls[i] = true;
nulls[5] = false;
values[5] = CStringGetTextDatum("<backend information not available>");
tuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
SRF_RETURN_NEXT(funcctx, HeapTupleGetDatum(tuple));
}
/* Values available to all callers */
values[0] = ObjectIdGetDatum(beentry->st_databaseid);
values[1] = Int32GetDatum(beentry->st_procpid);
values[2] = ObjectIdGetDatum(beentry->st_userid);
if (beentry->st_appname)
values[3] = CStringGetTextDatum(beentry->st_appname);
else
nulls[3] = true;
/* Values only available to same user or superuser */
if (superuser() || beentry->st_userid == GetUserId())
{
switch (beentry->st_state)
{
case STATE_IDLE:
values[4] = CStringGetTextDatum("idle");
break;
case STATE_RUNNING:
values[4] = CStringGetTextDatum("active");
break;
case STATE_IDLEINTRANSACTION:
values[4] = CStringGetTextDatum("idle in transaction");
break;
case STATE_FASTPATH:
values[4] = CStringGetTextDatum("fastpath function call");
break;
case STATE_IDLEINTRANSACTION_ABORTED:
values[4] = CStringGetTextDatum("idle in transaction (aborted)");
break;
case STATE_DISABLED:
values[4] = CStringGetTextDatum("disabled");
break;
case STATE_UNDEFINED:
nulls[4] = true;
break;
}
values[5] = CStringGetTextDatum(beentry->st_activity);
values[6] = BoolGetDatum(beentry->st_waiting);
if (beentry->st_xact_start_timestamp != 0)
values[7] = TimestampTzGetDatum(beentry->st_xact_start_timestamp);
else
nulls[7] = true;
if (beentry->st_activity_start_timestamp != 0)
values[8] = TimestampTzGetDatum(beentry->st_activity_start_timestamp);
else
nulls[8] = true;
if (beentry->st_proc_start_timestamp != 0)
values[9] = TimestampTzGetDatum(beentry->st_proc_start_timestamp);
else
nulls[9] = true;
if (beentry->st_state_start_timestamp != 0)
values[10] = TimestampTzGetDatum(beentry->st_state_start_timestamp);
else
nulls[10] = true;
/* A zeroed client addr means we don't know */
memset(&zero_clientaddr, 0, sizeof(zero_clientaddr));
if (memcmp(&(beentry->st_clientaddr), &zero_clientaddr,
sizeof(zero_clientaddr) == 0))
{
nulls[11] = true;
nulls[12] = true;
nulls[13] = true;
}
else
{
if (beentry->st_clientaddr.addr.ss_family == AF_INET
#ifdef HAVE_IPV6
|| beentry->st_clientaddr.addr.ss_family == AF_INET6
#endif
)
{
char remote_host[NI_MAXHOST];
char remote_port[NI_MAXSERV];
int ret;
remote_host[0] = '\0';
remote_port[0] = '\0';
ret = pg_getnameinfo_all(&beentry->st_clientaddr.addr,
beentry->st_clientaddr.salen,
remote_host, sizeof(remote_host),
remote_port, sizeof(remote_port),
NI_NUMERICHOST | NI_NUMERICSERV);
if (ret == 0)
{
clean_ipv6_addr(beentry->st_clientaddr.addr.ss_family, remote_host);
values[11] = DirectFunctionCall1(inet_in,
CStringGetDatum(remote_host));
if (beentry->st_clienthostname)
values[12] = CStringGetTextDatum(beentry->st_clienthostname);
else
nulls[12] = true;
values[13] = Int32GetDatum(atoi(remote_port));
}
else
{
nulls[11] = true;
nulls[12] = true;
nulls[13] = true;
}
}
else if (beentry->st_clientaddr.addr.ss_family == AF_UNIX)
{
/*
* Unix sockets always reports NULL for host and -1 for
* port, so it's possible to tell the difference to
* connections we have no permissions to view, or with
* errors.
*/
nulls[11] = true;
nulls[12] = true;
values[13] = DatumGetInt32(-1);
}
else
{
/* Unknown address type, should never happen */
nulls[11] = true;
nulls[12] = true;
nulls[13] = true;
}
}
}
else
{
/* No permissions to view data about this session */
values[5] = CStringGetTextDatum("<insufficient privilege>");
nulls[4] = true;
nulls[6] = true;
nulls[7] = true;
nulls[8] = true;
nulls[9] = true;
nulls[10] = true;
nulls[11] = true;
nulls[12] = true;
nulls[13] = true;
}
tuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
SRF_RETURN_NEXT(funcctx, HeapTupleGetDatum(tuple));
}
else
{
/* nothing left */
SRF_RETURN_DONE(funcctx);
}
}
| Datum pg_stat_get_analyze_count | ( | PG_FUNCTION_ARGS | ) |
Definition at line 402 of file pgstatfuncs.c.
References PgStat_StatTabEntry::analyze_count, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->analyze_count);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_autoanalyze_count | ( | PG_FUNCTION_ARGS | ) |
Definition at line 417 of file pgstatfuncs.c.
References PgStat_StatTabEntry::autovac_analyze_count, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->autovac_analyze_count);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_autovacuum_count | ( | PG_FUNCTION_ARGS | ) |
Definition at line 387 of file pgstatfuncs.c.
References PgStat_StatTabEntry::autovac_vacuum_count, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->autovac_vacuum_count);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_backend_activity | ( | PG_FUNCTION_ARGS | ) |
Definition at line 834 of file pgstatfuncs.c.
References cstring_to_text(), GetUserId(), NULL, PG_GETARG_INT32, PG_RETURN_TEXT_P, pgstat_fetch_stat_beentry(), PgBackendStatus::st_activity, PgBackendStatus::st_userid, and superuser().
{
int32 beid = PG_GETARG_INT32(0);
PgBackendStatus *beentry;
const char *activity;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
activity = "<backend information not available>";
else if (!superuser() && beentry->st_userid != GetUserId())
activity = "<insufficient privilege>";
else if (*(beentry->st_activity) == '\0')
activity = "<command string not enabled>";
else
activity = beentry->st_activity;
PG_RETURN_TEXT_P(cstring_to_text(activity));
}
| Datum pg_stat_get_backend_activity_start | ( | PG_FUNCTION_ARGS | ) |
Definition at line 873 of file pgstatfuncs.c.
References GetUserId(), NULL, PG_GETARG_INT32, PG_RETURN_NULL, PG_RETURN_TIMESTAMPTZ, pgstat_fetch_stat_beentry(), PgBackendStatus::st_activity_start_timestamp, PgBackendStatus::st_userid, and superuser().
{
int32 beid = PG_GETARG_INT32(0);
TimestampTz result;
PgBackendStatus *beentry;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
if (!superuser() && beentry->st_userid != GetUserId())
PG_RETURN_NULL();
result = beentry->st_activity_start_timestamp;
/*
* No time recorded for start of current query -- this is the case if the
* user hasn't enabled query-level stats collection.
*/
if (result == 0)
PG_RETURN_NULL();
PG_RETURN_TIMESTAMPTZ(result);
}
| Datum pg_stat_get_backend_client_addr | ( | PG_FUNCTION_ARGS | ) |
Definition at line 943 of file pgstatfuncs.c.
References SockAddr::addr, clean_ipv6_addr(), CStringGetDatum, DirectFunctionCall1, GetUserId(), inet_in(), memcmp(), NI_NUMERICHOST, NI_NUMERICSERV, NULL, PG_GETARG_INT32, pg_getnameinfo_all(), PG_RETURN_INET_P, PG_RETURN_NULL, pgstat_fetch_stat_beentry(), SockAddr::salen, PgBackendStatus::st_clientaddr, PgBackendStatus::st_userid, and superuser().
{
int32 beid = PG_GETARG_INT32(0);
PgBackendStatus *beentry;
SockAddr zero_clientaddr;
char remote_host[NI_MAXHOST];
int ret;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
if (!superuser() && beentry->st_userid != GetUserId())
PG_RETURN_NULL();
/* A zeroed client addr means we don't know */
memset(&zero_clientaddr, 0, sizeof(zero_clientaddr));
if (memcmp(&(beentry->st_clientaddr), &zero_clientaddr,
sizeof(zero_clientaddr) == 0))
PG_RETURN_NULL();
switch (beentry->st_clientaddr.addr.ss_family)
{
case AF_INET:
#ifdef HAVE_IPV6
case AF_INET6:
#endif
break;
default:
PG_RETURN_NULL();
}
remote_host[0] = '\0';
ret = pg_getnameinfo_all(&beentry->st_clientaddr.addr,
beentry->st_clientaddr.salen,
remote_host, sizeof(remote_host),
NULL, 0,
NI_NUMERICHOST | NI_NUMERICSERV);
if (ret != 0)
PG_RETURN_NULL();
clean_ipv6_addr(beentry->st_clientaddr.addr.ss_family, remote_host);
PG_RETURN_INET_P(DirectFunctionCall1(inet_in,
CStringGetDatum(remote_host)));
}
| Datum pg_stat_get_backend_client_port | ( | PG_FUNCTION_ARGS | ) |
Definition at line 990 of file pgstatfuncs.c.
References SockAddr::addr, CStringGetDatum, DirectFunctionCall1, GetUserId(), int4in(), memcmp(), NI_NUMERICHOST, NI_NUMERICSERV, NULL, PG_GETARG_INT32, pg_getnameinfo_all(), PG_RETURN_DATUM, PG_RETURN_INT32, PG_RETURN_NULL, pgstat_fetch_stat_beentry(), SockAddr::salen, PgBackendStatus::st_clientaddr, PgBackendStatus::st_userid, and superuser().
{
int32 beid = PG_GETARG_INT32(0);
PgBackendStatus *beentry;
SockAddr zero_clientaddr;
char remote_port[NI_MAXSERV];
int ret;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
if (!superuser() && beentry->st_userid != GetUserId())
PG_RETURN_NULL();
/* A zeroed client addr means we don't know */
memset(&zero_clientaddr, 0, sizeof(zero_clientaddr));
if (memcmp(&(beentry->st_clientaddr), &zero_clientaddr,
sizeof(zero_clientaddr) == 0))
PG_RETURN_NULL();
switch (beentry->st_clientaddr.addr.ss_family)
{
case AF_INET:
#ifdef HAVE_IPV6
case AF_INET6:
#endif
break;
case AF_UNIX:
PG_RETURN_INT32(-1);
default:
PG_RETURN_NULL();
}
remote_port[0] = '\0';
ret = pg_getnameinfo_all(&beentry->st_clientaddr.addr,
beentry->st_clientaddr.salen,
NULL, 0,
remote_port, sizeof(remote_port),
NI_NUMERICHOST | NI_NUMERICSERV);
if (ret != 0)
PG_RETURN_NULL();
PG_RETURN_DATUM(DirectFunctionCall1(int4in,
CStringGetDatum(remote_port)));
}
| Datum pg_stat_get_backend_dbid | ( | PG_FUNCTION_ARGS | ) |
Definition at line 808 of file pgstatfuncs.c.
References NULL, PG_GETARG_INT32, PG_RETURN_NULL, PG_RETURN_OID, pgstat_fetch_stat_beentry(), and PgBackendStatus::st_databaseid.
{
int32 beid = PG_GETARG_INT32(0);
PgBackendStatus *beentry;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
PG_RETURN_OID(beentry->st_databaseid);
}
| Datum pg_stat_get_backend_idset | ( | PG_FUNCTION_ARGS | ) |
Definition at line 467 of file pgstatfuncs.c.
References Int32GetDatum, MemoryContextAlloc(), FuncCallContext::multi_call_memory_ctx, pgstat_fetch_stat_numbackends(), SRF_FIRSTCALL_INIT, SRF_IS_FIRSTCALL, SRF_PERCALL_SETUP, SRF_RETURN_DONE, SRF_RETURN_NEXT, and FuncCallContext::user_fctx.
{
FuncCallContext *funcctx;
int *fctx;
int32 result;
/* stuff done only on the first call of the function */
if (SRF_IS_FIRSTCALL())
{
/* create a function context for cross-call persistence */
funcctx = SRF_FIRSTCALL_INIT();
fctx = MemoryContextAlloc(funcctx->multi_call_memory_ctx,
2 * sizeof(int));
funcctx->user_fctx = fctx;
fctx[0] = 0;
fctx[1] = pgstat_fetch_stat_numbackends();
}
/* stuff done on every call of the function */
funcctx = SRF_PERCALL_SETUP();
fctx = funcctx->user_fctx;
fctx[0] += 1;
result = fctx[0];
if (result <= fctx[1])
{
/* do when there is more left to send */
SRF_RETURN_NEXT(funcctx, Int32GetDatum(result));
}
else
{
/* do when there is no more left */
SRF_RETURN_DONE(funcctx);
}
}
| Datum pg_stat_get_backend_pid | ( | PG_FUNCTION_ARGS | ) |
Definition at line 795 of file pgstatfuncs.c.
References NULL, PG_GETARG_INT32, PG_RETURN_INT32, PG_RETURN_NULL, pgstat_fetch_stat_beentry(), and PgBackendStatus::st_procpid.
{
int32 beid = PG_GETARG_INT32(0);
PgBackendStatus *beentry;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
PG_RETURN_INT32(beentry->st_procpid);
}
| Datum pg_stat_get_backend_start | ( | PG_FUNCTION_ARGS | ) |
Definition at line 921 of file pgstatfuncs.c.
References GetUserId(), NULL, PG_GETARG_INT32, PG_RETURN_NULL, PG_RETURN_TIMESTAMPTZ, pgstat_fetch_stat_beentry(), PgBackendStatus::st_proc_start_timestamp, PgBackendStatus::st_userid, and superuser().
{
int32 beid = PG_GETARG_INT32(0);
TimestampTz result;
PgBackendStatus *beentry;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
if (!superuser() && beentry->st_userid != GetUserId())
PG_RETURN_NULL();
result = beentry->st_proc_start_timestamp;
if (result == 0) /* probably can't happen? */
PG_RETURN_NULL();
PG_RETURN_TIMESTAMPTZ(result);
}
| Datum pg_stat_get_backend_userid | ( | PG_FUNCTION_ARGS | ) |
Definition at line 821 of file pgstatfuncs.c.
References NULL, PG_GETARG_INT32, PG_RETURN_NULL, PG_RETURN_OID, pgstat_fetch_stat_beentry(), and PgBackendStatus::st_userid.
{
int32 beid = PG_GETARG_INT32(0);
PgBackendStatus *beentry;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
PG_RETURN_OID(beentry->st_userid);
}
| Datum pg_stat_get_backend_waiting | ( | PG_FUNCTION_ARGS | ) |
Definition at line 854 of file pgstatfuncs.c.
References GetUserId(), NULL, PG_GETARG_INT32, PG_RETURN_BOOL, PG_RETURN_NULL, pgstat_fetch_stat_beentry(), PgBackendStatus::st_userid, PgBackendStatus::st_waiting, and superuser().
{
int32 beid = PG_GETARG_INT32(0);
bool result;
PgBackendStatus *beentry;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
if (!superuser() && beentry->st_userid != GetUserId())
PG_RETURN_NULL();
result = beentry->st_waiting;
PG_RETURN_BOOL(result);
}
| Datum pg_stat_get_backend_xact_start | ( | PG_FUNCTION_ARGS | ) |
Definition at line 899 of file pgstatfuncs.c.
References GetUserId(), NULL, PG_GETARG_INT32, PG_RETURN_NULL, PG_RETURN_TIMESTAMPTZ, pgstat_fetch_stat_beentry(), PgBackendStatus::st_userid, PgBackendStatus::st_xact_start_timestamp, and superuser().
{
int32 beid = PG_GETARG_INT32(0);
TimestampTz result;
PgBackendStatus *beentry;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
if (!superuser() && beentry->st_userid != GetUserId())
PG_RETURN_NULL();
result = beentry->st_xact_start_timestamp;
if (result == 0) /* not in a transaction */
PG_RETURN_NULL();
PG_RETURN_TIMESTAMPTZ(result);
}
| Datum pg_stat_get_bgwriter_buf_written_checkpoints | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1405 of file pgstatfuncs.c.
References PG_RETURN_INT64, and pgstat_fetch_global().
{
PG_RETURN_INT64(pgstat_fetch_global()->buf_written_checkpoints);
}
| Datum pg_stat_get_bgwriter_buf_written_clean | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1411 of file pgstatfuncs.c.
References PG_RETURN_INT64, and pgstat_fetch_global().
{
PG_RETURN_INT64(pgstat_fetch_global()->buf_written_clean);
}
| Datum pg_stat_get_bgwriter_maxwritten_clean | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1417 of file pgstatfuncs.c.
References PG_RETURN_INT64, and pgstat_fetch_global().
{
PG_RETURN_INT64(pgstat_fetch_global()->maxwritten_clean);
}
| Datum pg_stat_get_bgwriter_requested_checkpoints | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1399 of file pgstatfuncs.c.
References PG_RETURN_INT64, and pgstat_fetch_global().
{
PG_RETURN_INT64(pgstat_fetch_global()->requested_checkpoints);
}
| Datum pg_stat_get_bgwriter_stat_reset_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1437 of file pgstatfuncs.c.
References PG_RETURN_TIMESTAMPTZ, and pgstat_fetch_global().
{
PG_RETURN_TIMESTAMPTZ(pgstat_fetch_global()->stat_reset_timestamp);
}
| Datum pg_stat_get_bgwriter_timed_checkpoints | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1393 of file pgstatfuncs.c.
References PG_RETURN_INT64, and pgstat_fetch_global().
{
PG_RETURN_INT64(pgstat_fetch_global()->timed_checkpoints);
}
| Datum pg_stat_get_blocks_fetched | ( | PG_FUNCTION_ARGS | ) |
Definition at line 269 of file pgstatfuncs.c.
References PgStat_StatTabEntry::blocks_fetched, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->blocks_fetched);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_blocks_hit | ( | PG_FUNCTION_ARGS | ) |
Definition at line 285 of file pgstatfuncs.c.
References PgStat_StatTabEntry::blocks_hit, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->blocks_hit);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_buf_alloc | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1455 of file pgstatfuncs.c.
References PG_RETURN_INT64, and pgstat_fetch_global().
{
PG_RETURN_INT64(pgstat_fetch_global()->buf_alloc);
}
| Datum pg_stat_get_buf_fsync_backend | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1449 of file pgstatfuncs.c.
References PG_RETURN_INT64, and pgstat_fetch_global().
{
PG_RETURN_INT64(pgstat_fetch_global()->buf_fsync_backend);
}
| Datum pg_stat_get_buf_written_backend | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1443 of file pgstatfuncs.c.
References PG_RETURN_INT64, and pgstat_fetch_global().
{
PG_RETURN_INT64(pgstat_fetch_global()->buf_written_backend);
}
| Datum pg_stat_get_checkpoint_sync_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1430 of file pgstatfuncs.c.
References PG_RETURN_FLOAT8, and pgstat_fetch_global().
{
/* time is already in msec, just convert to double for presentation */
PG_RETURN_FLOAT8((double) pgstat_fetch_global()->checkpoint_sync_time);
}
| Datum pg_stat_get_checkpoint_write_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1423 of file pgstatfuncs.c.
References PG_RETURN_FLOAT8, and pgstat_fetch_global().
{
/* time is already in msec, just convert to double for presentation */
PG_RETURN_FLOAT8((double) pgstat_fetch_global()->checkpoint_write_time);
}
| Datum pg_stat_get_db_blk_read_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1361 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_block_read_time, NULL, PG_GETARG_OID, PG_RETURN_FLOAT8, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
double result;
PgStat_StatDBEntry *dbentry;
/* convert counter from microsec to millisec for display */
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = ((double) dbentry->n_block_read_time) / 1000.0;
PG_RETURN_FLOAT8(result);
}
| Datum pg_stat_get_db_blk_write_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1377 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_block_write_time, NULL, PG_GETARG_OID, PG_RETURN_FLOAT8, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
double result;
PgStat_StatDBEntry *dbentry;
/* convert counter from microsec to millisec for display */
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = ((double) dbentry->n_block_write_time) / 1000.0;
PG_RETURN_FLOAT8(result);
}
| Datum pg_stat_get_db_blocks_fetched | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1091 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_blocks_fetched, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_blocks_fetched);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_blocks_hit | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1107 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_blocks_hit, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_blocks_hit);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_conflict_all | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1326 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_conflict_bufferpin, PgStat_StatDBEntry::n_conflict_lock, PgStat_StatDBEntry::n_conflict_snapshot, PgStat_StatDBEntry::n_conflict_startup_deadlock, PgStat_StatDBEntry::n_conflict_tablespace, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (
dbentry->n_conflict_tablespace +
dbentry->n_conflict_lock +
dbentry->n_conflict_snapshot +
dbentry->n_conflict_bufferpin +
dbentry->n_conflict_startup_deadlock);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_conflict_bufferpin | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1296 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_conflict_bufferpin, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_conflict_bufferpin);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_conflict_lock | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1266 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_conflict_lock, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_conflict_lock);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_conflict_snapshot | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1281 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_conflict_snapshot, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_conflict_snapshot);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_conflict_startup_deadlock | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1311 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_conflict_startup_deadlock, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_conflict_startup_deadlock);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_conflict_tablespace | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1251 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_conflict_tablespace, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_conflict_tablespace);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_deadlocks | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1346 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_deadlocks, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_deadlocks);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_numbackends | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1038 of file pgstatfuncs.c.
References PG_GETARG_OID, PG_RETURN_INT32, pgstat_fetch_stat_beentry(), pgstat_fetch_stat_numbackends(), and PgBackendStatus::st_databaseid.
{
Oid dbid = PG_GETARG_OID(0);
int32 result;
int tot_backends = pgstat_fetch_stat_numbackends();
int beid;
result = 0;
for (beid = 1; beid <= tot_backends; beid++)
{
PgBackendStatus *beentry = pgstat_fetch_stat_beentry(beid);
if (beentry && beentry->st_databaseid == dbid)
result++;
}
PG_RETURN_INT32(result);
}
| Datum pg_stat_get_db_stat_reset_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1202 of file pgstatfuncs.c.
References NULL, PG_GETARG_OID, PG_RETURN_NULL, PG_RETURN_TIMESTAMPTZ, pgstat_fetch_stat_dbentry(), and PgStat_StatDBEntry::stat_reset_timestamp.
{
Oid dbid = PG_GETARG_OID(0);
TimestampTz result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = dbentry->stat_reset_timestamp;
if (result == 0)
PG_RETURN_NULL();
else
PG_RETURN_TIMESTAMPTZ(result);
}
| Datum pg_stat_get_db_temp_bytes | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1236 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_temp_bytes, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = dbentry->n_temp_bytes;
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_temp_files | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1220 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_temp_files, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = dbentry->n_temp_files;
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_tuples_deleted | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1187 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_tuples_deleted, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_tuples_deleted);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_tuples_fetched | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1139 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_tuples_fetched, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_tuples_fetched);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_tuples_inserted | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1155 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_tuples_inserted, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_tuples_inserted);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_tuples_returned | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1123 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_tuples_returned, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_tuples_returned);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_tuples_updated | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1171 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_tuples_updated, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_tuples_updated);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_xact_commit | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1059 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_xact_commit, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_xact_commit);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_db_xact_rollback | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1075 of file pgstatfuncs.c.
References PgStat_StatDBEntry::n_xact_rollback, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_dbentry().
{
Oid dbid = PG_GETARG_OID(0);
int64 result;
PgStat_StatDBEntry *dbentry;
if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL)
result = 0;
else
result = (int64) (dbentry->n_xact_rollback);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_dead_tuples | ( | PG_FUNCTION_ARGS | ) |
Definition at line 253 of file pgstatfuncs.c.
References PgStat_StatTabEntry::n_dead_tuples, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->n_dead_tuples);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_function_calls | ( | PG_FUNCTION_ARGS | ) |
Definition at line 432 of file pgstatfuncs.c.
References PgStat_StatFuncEntry::f_numcalls, NULL, PG_GETARG_OID, PG_RETURN_INT64, PG_RETURN_NULL, and pgstat_fetch_stat_funcentry().
{
Oid funcid = PG_GETARG_OID(0);
PgStat_StatFuncEntry *funcentry;
if ((funcentry = pgstat_fetch_stat_funcentry(funcid)) == NULL)
PG_RETURN_NULL();
PG_RETURN_INT64(funcentry->f_numcalls);
}
| Datum pg_stat_get_function_self_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 455 of file pgstatfuncs.c.
References PgStat_StatFuncEntry::f_self_time, NULL, PG_GETARG_OID, PG_RETURN_FLOAT8, PG_RETURN_NULL, and pgstat_fetch_stat_funcentry().
{
Oid funcid = PG_GETARG_OID(0);
PgStat_StatFuncEntry *funcentry;
if ((funcentry = pgstat_fetch_stat_funcentry(funcid)) == NULL)
PG_RETURN_NULL();
/* convert counter from microsec to millisec for display */
PG_RETURN_FLOAT8(((double) funcentry->f_self_time) / 1000.0);
}
| Datum pg_stat_get_function_total_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 443 of file pgstatfuncs.c.
References PgStat_StatFuncEntry::f_total_time, NULL, PG_GETARG_OID, PG_RETURN_FLOAT8, PG_RETURN_NULL, and pgstat_fetch_stat_funcentry().
{
Oid funcid = PG_GETARG_OID(0);
PgStat_StatFuncEntry *funcentry;
if ((funcentry = pgstat_fetch_stat_funcentry(funcid)) == NULL)
PG_RETURN_NULL();
/* convert counter from microsec to millisec for display */
PG_RETURN_FLOAT8(((double) funcentry->f_total_time) / 1000.0);
}
| Datum pg_stat_get_last_analyze_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 336 of file pgstatfuncs.c.
References PgStat_StatTabEntry::analyze_timestamp, NULL, PG_GETARG_OID, PG_RETURN_NULL, PG_RETURN_TIMESTAMPTZ, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
TimestampTz result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = tabentry->analyze_timestamp;
if (result == 0)
PG_RETURN_NULL();
else
PG_RETURN_TIMESTAMPTZ(result);
}
| Datum pg_stat_get_last_autoanalyze_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 354 of file pgstatfuncs.c.
References PgStat_StatTabEntry::autovac_analyze_timestamp, NULL, PG_GETARG_OID, PG_RETURN_NULL, PG_RETURN_TIMESTAMPTZ, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
TimestampTz result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = tabentry->autovac_analyze_timestamp;
if (result == 0)
PG_RETURN_NULL();
else
PG_RETURN_TIMESTAMPTZ(result);
}
| Datum pg_stat_get_last_autovacuum_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 318 of file pgstatfuncs.c.
References PgStat_StatTabEntry::autovac_vacuum_timestamp, NULL, PG_GETARG_OID, PG_RETURN_NULL, PG_RETURN_TIMESTAMPTZ, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
TimestampTz result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = tabentry->autovac_vacuum_timestamp;
if (result == 0)
PG_RETURN_NULL();
else
PG_RETURN_TIMESTAMPTZ(result);
}
| Datum pg_stat_get_last_vacuum_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 300 of file pgstatfuncs.c.
References NULL, PG_GETARG_OID, PG_RETURN_NULL, PG_RETURN_TIMESTAMPTZ, pgstat_fetch_stat_tabentry(), and PgStat_StatTabEntry::vacuum_timestamp.
{
Oid relid = PG_GETARG_OID(0);
TimestampTz result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = tabentry->vacuum_timestamp;
if (result == 0)
PG_RETURN_NULL();
else
PG_RETURN_TIMESTAMPTZ(result);
}
| Datum pg_stat_get_live_tuples | ( | PG_FUNCTION_ARGS | ) |
Definition at line 237 of file pgstatfuncs.c.
References PgStat_StatTabEntry::n_live_tuples, NULL, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->n_live_tuples);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_numscans | ( | PG_FUNCTION_ARGS | ) |
Definition at line 125 of file pgstatfuncs.c.
References NULL, PgStat_StatTabEntry::numscans, PG_GETARG_OID, PG_RETURN_INT64, and pgstat_fetch_stat_tabentry().
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->numscans);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_tuples_deleted | ( | PG_FUNCTION_ARGS | ) |
Definition at line 205 of file pgstatfuncs.c.
References NULL, PG_GETARG_OID, PG_RETURN_INT64, pgstat_fetch_stat_tabentry(), and PgStat_StatTabEntry::tuples_deleted.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->tuples_deleted);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_tuples_fetched | ( | PG_FUNCTION_ARGS | ) |
Definition at line 157 of file pgstatfuncs.c.
References NULL, PG_GETARG_OID, PG_RETURN_INT64, pgstat_fetch_stat_tabentry(), and PgStat_StatTabEntry::tuples_fetched.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->tuples_fetched);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_tuples_hot_updated | ( | PG_FUNCTION_ARGS | ) |
Definition at line 221 of file pgstatfuncs.c.
References NULL, PG_GETARG_OID, PG_RETURN_INT64, pgstat_fetch_stat_tabentry(), and PgStat_StatTabEntry::tuples_hot_updated.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->tuples_hot_updated);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_tuples_inserted | ( | PG_FUNCTION_ARGS | ) |
Definition at line 173 of file pgstatfuncs.c.
References NULL, PG_GETARG_OID, PG_RETURN_INT64, pgstat_fetch_stat_tabentry(), and PgStat_StatTabEntry::tuples_inserted.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->tuples_inserted);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_tuples_returned | ( | PG_FUNCTION_ARGS | ) |
Definition at line 141 of file pgstatfuncs.c.
References NULL, PG_GETARG_OID, PG_RETURN_INT64, pgstat_fetch_stat_tabentry(), and PgStat_StatTabEntry::tuples_returned.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->tuples_returned);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_tuples_updated | ( | PG_FUNCTION_ARGS | ) |
Definition at line 189 of file pgstatfuncs.c.
References NULL, PG_GETARG_OID, PG_RETURN_INT64, pgstat_fetch_stat_tabentry(), and PgStat_StatTabEntry::tuples_updated.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->tuples_updated);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_vacuum_count | ( | PG_FUNCTION_ARGS | ) |
Definition at line 372 of file pgstatfuncs.c.
References NULL, PG_GETARG_OID, PG_RETURN_INT64, pgstat_fetch_stat_tabentry(), and PgStat_StatTabEntry::vacuum_count.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->vacuum_count);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_xact_blocks_fetched | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1584 of file pgstatfuncs.c.
References find_tabstat_entry(), NULL, PG_GETARG_OID, PG_RETURN_INT64, PgStat_TableCounts::t_blocks_fetched, and PgStat_TableStatus::t_counts.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_TableStatus *tabentry;
if ((tabentry = find_tabstat_entry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->t_counts.t_blocks_fetched);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_xact_blocks_hit | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1599 of file pgstatfuncs.c.
References find_tabstat_entry(), NULL, PG_GETARG_OID, PG_RETURN_INT64, PgStat_TableCounts::t_blocks_hit, and PgStat_TableStatus::t_counts.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_TableStatus *tabentry;
if ((tabentry = find_tabstat_entry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->t_counts.t_blocks_hit);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_xact_function_calls | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1614 of file pgstatfuncs.c.
References PgStat_BackendFunctionEntry::f_counts, PgStat_FunctionCounts::f_numcalls, find_funcstat_entry(), NULL, PG_GETARG_OID, PG_RETURN_INT64, and PG_RETURN_NULL.
{
Oid funcid = PG_GETARG_OID(0);
PgStat_BackendFunctionEntry *funcentry;
if ((funcentry = find_funcstat_entry(funcid)) == NULL)
PG_RETURN_NULL();
PG_RETURN_INT64(funcentry->f_counts.f_numcalls);
}
| Datum pg_stat_get_xact_function_self_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1636 of file pgstatfuncs.c.
References PgStat_BackendFunctionEntry::f_counts, PgStat_FunctionCounts::f_self_time, find_funcstat_entry(), INSTR_TIME_GET_MILLISEC, NULL, PG_GETARG_OID, PG_RETURN_FLOAT8, and PG_RETURN_NULL.
{
Oid funcid = PG_GETARG_OID(0);
PgStat_BackendFunctionEntry *funcentry;
if ((funcentry = find_funcstat_entry(funcid)) == NULL)
PG_RETURN_NULL();
PG_RETURN_FLOAT8(INSTR_TIME_GET_MILLISEC(funcentry->f_counts.f_self_time));
}
| Datum pg_stat_get_xact_function_total_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1625 of file pgstatfuncs.c.
References PgStat_BackendFunctionEntry::f_counts, PgStat_FunctionCounts::f_total_time, find_funcstat_entry(), INSTR_TIME_GET_MILLISEC, NULL, PG_GETARG_OID, PG_RETURN_FLOAT8, and PG_RETURN_NULL.
{
Oid funcid = PG_GETARG_OID(0);
PgStat_BackendFunctionEntry *funcentry;
if ((funcentry = find_funcstat_entry(funcid)) == NULL)
PG_RETURN_NULL();
PG_RETURN_FLOAT8(INSTR_TIME_GET_MILLISEC(funcentry->f_counts.f_total_time));
}
| Datum pg_stat_get_xact_numscans | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1461 of file pgstatfuncs.c.
References find_tabstat_entry(), NULL, PG_GETARG_OID, PG_RETURN_INT64, PgStat_TableStatus::t_counts, and PgStat_TableCounts::t_numscans.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_TableStatus *tabentry;
if ((tabentry = find_tabstat_entry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->t_counts.t_numscans);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_xact_tuples_deleted | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1548 of file pgstatfuncs.c.
References find_tabstat_entry(), NULL, PG_GETARG_OID, PG_RETURN_INT64, PgStat_TableStatus::t_counts, PgStat_TableCounts::t_tuples_deleted, PgStat_TableStatus::trans, trans, PgStat_TableXactStatus::tuples_deleted, and PgStat_TableXactStatus::upper.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_TableStatus *tabentry;
PgStat_TableXactStatus *trans;
if ((tabentry = find_tabstat_entry(relid)) == NULL)
result = 0;
else
{
result = tabentry->t_counts.t_tuples_deleted;
/* live subtransactions' counts aren't in t_tuples_deleted yet */
for (trans = tabentry->trans; trans != NULL; trans = trans->upper)
result += trans->tuples_deleted;
}
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_xact_tuples_fetched | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1491 of file pgstatfuncs.c.
References find_tabstat_entry(), NULL, PG_GETARG_OID, PG_RETURN_INT64, PgStat_TableStatus::t_counts, and PgStat_TableCounts::t_tuples_fetched.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_TableStatus *tabentry;
if ((tabentry = find_tabstat_entry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->t_counts.t_tuples_fetched);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_xact_tuples_hot_updated | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1569 of file pgstatfuncs.c.
References find_tabstat_entry(), NULL, PG_GETARG_OID, PG_RETURN_INT64, PgStat_TableStatus::t_counts, and PgStat_TableCounts::t_tuples_hot_updated.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_TableStatus *tabentry;
if ((tabentry = find_tabstat_entry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->t_counts.t_tuples_hot_updated);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_xact_tuples_inserted | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1506 of file pgstatfuncs.c.
References find_tabstat_entry(), NULL, PG_GETARG_OID, PG_RETURN_INT64, PgStat_TableStatus::t_counts, PgStat_TableCounts::t_tuples_inserted, PgStat_TableStatus::trans, trans, PgStat_TableXactStatus::tuples_inserted, and PgStat_TableXactStatus::upper.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_TableStatus *tabentry;
PgStat_TableXactStatus *trans;
if ((tabentry = find_tabstat_entry(relid)) == NULL)
result = 0;
else
{
result = tabentry->t_counts.t_tuples_inserted;
/* live subtransactions' counts aren't in t_tuples_inserted yet */
for (trans = tabentry->trans; trans != NULL; trans = trans->upper)
result += trans->tuples_inserted;
}
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_xact_tuples_returned | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1476 of file pgstatfuncs.c.
References find_tabstat_entry(), NULL, PG_GETARG_OID, PG_RETURN_INT64, PgStat_TableStatus::t_counts, and PgStat_TableCounts::t_tuples_returned.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_TableStatus *tabentry;
if ((tabentry = find_tabstat_entry(relid)) == NULL)
result = 0;
else
result = (int64) (tabentry->t_counts.t_tuples_returned);
PG_RETURN_INT64(result);
}
| Datum pg_stat_get_xact_tuples_updated | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1527 of file pgstatfuncs.c.
References find_tabstat_entry(), NULL, PG_GETARG_OID, PG_RETURN_INT64, PgStat_TableStatus::t_counts, PgStat_TableCounts::t_tuples_updated, PgStat_TableStatus::trans, trans, PgStat_TableXactStatus::tuples_updated, and PgStat_TableXactStatus::upper.
{
Oid relid = PG_GETARG_OID(0);
int64 result;
PgStat_TableStatus *tabentry;
PgStat_TableXactStatus *trans;
if ((tabentry = find_tabstat_entry(relid)) == NULL)
result = 0;
else
{
result = tabentry->t_counts.t_tuples_updated;
/* live subtransactions' counts aren't in t_tuples_updated yet */
for (trans = tabentry->trans; trans != NULL; trans = trans->upper)
result += trans->tuples_updated;
}
PG_RETURN_INT64(result);
}
| Datum pg_stat_reset | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1659 of file pgstatfuncs.c.
References PG_RETURN_VOID, and pgstat_reset_counters().
{
pgstat_reset_counters();
PG_RETURN_VOID();
}
| Datum pg_stat_reset_shared | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1668 of file pgstatfuncs.c.
References PG_GETARG_TEXT_PP, PG_RETURN_VOID, pgstat_reset_shared_counters(), and text_to_cstring().
{
char *target = text_to_cstring(PG_GETARG_TEXT_PP(0));
pgstat_reset_shared_counters(target);
PG_RETURN_VOID();
}
| Datum pg_stat_reset_single_function_counters | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1689 of file pgstatfuncs.c.
References PG_GETARG_OID, PG_RETURN_VOID, pgstat_reset_single_counter(), and RESET_FUNCTION.
{
Oid funcoid = PG_GETARG_OID(0);
pgstat_reset_single_counter(funcoid, RESET_FUNCTION);
PG_RETURN_VOID();
}
| Datum pg_stat_reset_single_table_counters | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1679 of file pgstatfuncs.c.
References PG_GETARG_OID, PG_RETURN_VOID, pgstat_reset_single_counter(), and RESET_TABLE.
{
Oid taboid = PG_GETARG_OID(0);
pgstat_reset_single_counter(taboid, RESET_TABLE);
PG_RETURN_VOID();
}
1.7.1