pgstatfuncs.c

来自「postgresql8.3.4源码,开源数据库」· C语言 代码 · 共 849 行 · 第 1/2 页

C
849
字号
	else if (*(beentry->st_activity) == '\0')		activity = "<command string not enabled>";	else		activity = beentry->st_activity;	len = strlen(activity);	result = palloc(VARHDRSZ + len);	SET_VARSIZE(result, VARHDRSZ + len);	memcpy(VARDATA(result), activity, len);	PG_RETURN_TEXT_P(result);}Datumpg_stat_get_backend_waiting(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_backend_activity_start(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_backend_xact_start(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_backend_start(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_backend_client_addr(PG_FUNCTION_ARGS){	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)		PG_RETURN_NULL();	clean_ipv6_addr(beentry->st_clientaddr.addr.ss_family, remote_host);	PG_RETURN_INET_P(DirectFunctionCall1(inet_in,										 CStringGetDatum(remote_host)));}Datumpg_stat_get_backend_client_port(PG_FUNCTION_ARGS){	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)		PG_RETURN_NULL();	PG_RETURN_DATUM(DirectFunctionCall1(int4in,										CStringGetDatum(remote_port)));}Datumpg_stat_get_db_numbackends(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_db_xact_commit(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_db_xact_rollback(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_db_blocks_fetched(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_db_blocks_hit(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_db_tuples_returned(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_db_tuples_fetched(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_db_tuples_inserted(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_db_tuples_updated(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_db_tuples_deleted(PG_FUNCTION_ARGS){	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);}Datumpg_stat_get_bgwriter_timed_checkpoints(PG_FUNCTION_ARGS){	PG_RETURN_INT64(pgstat_fetch_global()->timed_checkpoints);}Datumpg_stat_get_bgwriter_requested_checkpoints(PG_FUNCTION_ARGS){	PG_RETURN_INT64(pgstat_fetch_global()->requested_checkpoints);}Datumpg_stat_get_bgwriter_buf_written_checkpoints(PG_FUNCTION_ARGS){	PG_RETURN_INT64(pgstat_fetch_global()->buf_written_checkpoints);}Datumpg_stat_get_bgwriter_buf_written_clean(PG_FUNCTION_ARGS){	PG_RETURN_INT64(pgstat_fetch_global()->buf_written_clean);}Datumpg_stat_get_bgwriter_maxwritten_clean(PG_FUNCTION_ARGS){	PG_RETURN_INT64(pgstat_fetch_global()->maxwritten_clean);}Datumpg_stat_get_buf_written_backend(PG_FUNCTION_ARGS){	PG_RETURN_INT64(pgstat_fetch_global()->buf_written_backend);}Datumpg_stat_get_buf_alloc(PG_FUNCTION_ARGS){	PG_RETURN_INT64(pgstat_fetch_global()->buf_alloc);}/* Discard the active statistics snapshot */Datumpg_stat_clear_snapshot(PG_FUNCTION_ARGS){	pgstat_clear_snapshot();	PG_RETURN_VOID();}/* Reset all counters for the current database */Datumpg_stat_reset(PG_FUNCTION_ARGS){	pgstat_reset_counters();	PG_RETURN_VOID();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?