@ -36,363 +36,106 @@
# define HAS_PGSTAT_PERMISSIONS(role) (has_privs_of_role(GetUserId(), ROLE_PG_READ_ALL_STATS) || has_privs_of_role(GetUserId(), role))
# define HAS_PGSTAT_PERMISSIONS(role) (has_privs_of_role(GetUserId(), ROLE_PG_READ_ALL_STATS) || has_privs_of_role(GetUserId(), role))
Datum
# define PG_STAT_GET_RELENTRY_INT64(stat) \
pg_stat_get_numscans ( PG_FUNCTION_ARGS )
Datum \
{
CppConcat ( pg_stat_get_ , stat ) ( PG_FUNCTION_ARGS ) \
Oid relid = PG_GETARG_OID ( 0 ) ;
{ \
int64 result ;
Oid relid = PG_GETARG_OID ( 0 ) ; \
PgStat_StatTabEntry * tabentry ;
int64 result ; \
PgStat_StatTabEntry * tabentry ; \
if ( ( tabentry = pgstat_fetch_stat_tabentry ( relid ) ) = = NULL )
\
result = 0 ;
if ( ( tabentry = pgstat_fetch_stat_tabentry ( relid ) ) = = NULL ) \
else
result = 0 ; \
result = ( int64 ) ( tabentry - > numscans ) ;
else \
result = ( int64 ) ( tabentry - > stat ) ; \
PG_RETURN_INT64 ( result ) ;
\
}
PG_RETURN_INT64 ( result ) ; \
} \
Datum
/* pg_stat_get_analyze_count */
pg_stat_get_lastscan ( PG_FUNCTION_ARGS )
PG_STAT_GET_RELENTRY_INT64 ( analyze_count ) ;
{
Oid relid = PG_GETARG_OID ( 0 ) ;
/* pg_stat_get_autoanalyze_count */
TimestampTz result ;
PG_STAT_GET_RELENTRY_INT64 ( autoanalyze_count ) ;
PgStat_StatTabEntry * tabentry ;
/* pg_stat_get_autovacuum_count */
if ( ( tabentry = pgstat_fetch_stat_tabentry ( relid ) ) = = NULL )
PG_STAT_GET_RELENTRY_INT64 ( autovacuum_count ) ;
result = 0 ;
else
/* pg_stat_get_blocks_fetched */
result = tabentry - > lastscan ;
PG_STAT_GET_RELENTRY_INT64 ( blocks_fetched ) ;
if ( result = = 0 )
/* pg_stat_get_blocks_hit */
PG_RETURN_NULL ( ) ;
PG_STAT_GET_RELENTRY_INT64 ( blocks_hit ) ;
else
PG_RETURN_TIMESTAMPTZ ( result ) ;
/* pg_stat_get_dead_tuples */
}
PG_STAT_GET_RELENTRY_INT64 ( dead_tuples ) ;
/* pg_stat_get_ins_since_vacuum */
Datum
PG_STAT_GET_RELENTRY_INT64 ( ins_since_vacuum ) ;
pg_stat_get_tuples_returned ( PG_FUNCTION_ARGS )
{
/* pg_stat_get_live_tuples */
Oid relid = PG_GETARG_OID ( 0 ) ;
PG_STAT_GET_RELENTRY_INT64 ( live_tuples ) ;
int64 result ;
PgStat_StatTabEntry * tabentry ;
/* pg_stat_get_mods_since_analyze */
PG_STAT_GET_RELENTRY_INT64 ( mod_since_analyze ) ;
if ( ( tabentry = pgstat_fetch_stat_tabentry ( relid ) ) = = NULL )
result = 0 ;
/* pg_stat_get_numscans */
else
PG_STAT_GET_RELENTRY_INT64 ( numscans ) ;
result = ( int64 ) ( tabentry - > tuples_returned ) ;
/* pg_stat_get_tuples_deleted */
PG_RETURN_INT64 ( result ) ;
PG_STAT_GET_RELENTRY_INT64 ( tuples_deleted ) ;
}
/* pg_stat_get_tuples_fetched */
PG_STAT_GET_RELENTRY_INT64 ( tuples_fetched ) ;
Datum
pg_stat_get_tuples_fetched ( PG_FUNCTION_ARGS )
/* pg_stat_get_tuples_hot_updated */
{
PG_STAT_GET_RELENTRY_INT64 ( tuples_hot_updated ) ;
Oid relid = PG_GETARG_OID ( 0 ) ;
int64 result ;
/* pg_stat_get_tuples_inserted */
PgStat_StatTabEntry * tabentry ;
PG_STAT_GET_RELENTRY_INT64 ( tuples_inserted ) ;
if ( ( tabentry = pgstat_fetch_stat_tabentry ( relid ) ) = = NULL )
/* pg_stat_get_tuples_returned */
result = 0 ;
PG_STAT_GET_RELENTRY_INT64 ( tuples_returned ) ;
else
result = ( int64 ) ( tabentry - > tuples_fetched ) ;
/* pg_stat_get_tuples_updated */
PG_STAT_GET_RELENTRY_INT64 ( tuples_updated ) ;
PG_RETURN_INT64 ( result ) ;
}
/* pg_stat_get_vacuum_count */
PG_STAT_GET_RELENTRY_INT64 ( vacuum_count ) ;
Datum
# define PG_STAT_GET_RELENTRY_TIMESTAMPTZ(stat) \
pg_stat_get_tuples_inserted ( PG_FUNCTION_ARGS )
Datum \
{
CppConcat ( pg_stat_get_ , stat ) ( PG_FUNCTION_ARGS ) \
Oid relid = PG_GETARG_OID ( 0 ) ;
{ \
int64 result ;
Oid relid = PG_GETARG_OID ( 0 ) ; \
PgStat_StatTabEntry * tabentry ;
TimestampTz result ; \
PgStat_StatTabEntry * tabentry ; \
if ( ( tabentry = pgstat_fetch_stat_tabentry ( relid ) ) = = NULL )
\
result = 0 ;
if ( ( tabentry = pgstat_fetch_stat_tabentry ( relid ) ) = = NULL ) \
else
result = 0 ; \
result = ( int64 ) ( tabentry - > tuples_inserted ) ;
else \
result = tabentry - > stat ; \
PG_RETURN_INT64 ( result ) ;
\
}
if ( result = = 0 ) \
PG_RETURN_NULL ( ) ; \
else \
Datum
PG_RETURN_TIMESTAMPTZ ( result ) ; \
pg_stat_get_tuples_updated ( PG_FUNCTION_ARGS )
} \
{
Oid relid = PG_GETARG_OID ( 0 ) ;
/* pg_stat_get_last_analyze_time */
int64 result ;
PG_STAT_GET_RELENTRY_TIMESTAMPTZ ( last_analyze_time ) ;
PgStat_StatTabEntry * tabentry ;
/* pg_stat_get_last_autoanalyze_time */
if ( ( tabentry = pgstat_fetch_stat_tabentry ( relid ) ) = = NULL )
PG_STAT_GET_RELENTRY_TIMESTAMPTZ ( last_autoanalyze_time ) ;
result = 0 ;
else
/* pg_stat_get_last_autovacuum_time */
result = ( int64 ) ( tabentry - > tuples_updated ) ;
PG_STAT_GET_RELENTRY_TIMESTAMPTZ ( last_autovacuum_time ) ;
PG_RETURN_INT64 ( result ) ;
/* pg_stat_get_last_vacuum_time */
}
PG_STAT_GET_RELENTRY_TIMESTAMPTZ ( last_vacuum_time ) ;
/* pg_stat_get_lastscan */
Datum
PG_STAT_GET_RELENTRY_TIMESTAMPTZ ( lastscan ) ;
pg_stat_get_tuples_deleted ( PG_FUNCTION_ARGS )
{
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_hot_updated ( PG_FUNCTION_ARGS )
{
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_live_tuples ( PG_FUNCTION_ARGS )
{
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_dead_tuples ( PG_FUNCTION_ARGS )
{
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_mod_since_analyze ( PG_FUNCTION_ARGS )
{
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 - > changes_since_analyze ) ;
PG_RETURN_INT64 ( result ) ;
}
Datum
pg_stat_get_ins_since_vacuum ( PG_FUNCTION_ARGS )
{
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 - > inserts_since_vacuum ) ;
PG_RETURN_INT64 ( result ) ;
}
Datum
pg_stat_get_blocks_fetched ( PG_FUNCTION_ARGS )
{
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 )
{
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_last_vacuum_time ( PG_FUNCTION_ARGS )
{
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_last_autovacuum_time ( PG_FUNCTION_ARGS )
{
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_analyze_time ( PG_FUNCTION_ARGS )
{
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 )
{
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_vacuum_count ( PG_FUNCTION_ARGS )
{
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_autovacuum_count ( PG_FUNCTION_ARGS )
{
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_analyze_count ( PG_FUNCTION_ARGS )
{
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 )
{
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
Datum
pg_stat_get_function_calls ( PG_FUNCTION_ARGS )
pg_stat_get_function_calls ( PG_FUNCTION_ARGS )