def get_seconds_since_last_vacuum_per_table()

in postgresql_metrics/postgres_queries.py [0:0]


def get_seconds_since_last_vacuum_per_table(conn):
    """Returns a list of tuples: (db_name, table_name, seconds_since_last_vacuum)
    where seconds_since_last_vacuum is 0 if no vacuum is done ever (stays flat zero)"""
    sql = ("SELECT current_database(), relname, now(), last_vacuum, last_autovacuum "
           "FROM pg_stat_user_tables")
    results = query(conn, sql)
    table_last_vacuum_list = []
    for db_name, table_name, time_now, last_vacuum, last_autovacuum in results:
        latest_vacuum = None
        if last_vacuum or last_autovacuum:
            latest_vacuum = max([x for x in (last_vacuum, last_autovacuum) if x])
        seconds_since_last_vacuum = int((time_now - (latest_vacuum or time_now)).total_seconds())
        table_last_vacuum_list.append((db_name, table_name, seconds_since_last_vacuum))
    return table_last_vacuum_list