Skip to main content

pg_extras/queries/
vacuum_stats.rs

1use crate::{queries::shared::Query, PgStatsVersion};
2use sqlx::{postgres::PgRow, Row};
3
4#[derive(Debug, Clone, serde::Serialize)]
5pub struct VacuumStats {
6    pub schema: String,
7    pub table: String,
8    pub last_vacuum: String,
9    pub last_autovacuum: String,
10    pub rowcount: String,
11    pub dead_rowcount: String,
12    pub autovacuum_threshold: String,
13    pub expect_autovacuum: String,
14}
15
16impl Query for VacuumStats {
17    fn new(row: &PgRow) -> Self {
18        Self {
19            schema: row.try_get("schema").unwrap_or_default(),
20            table: row.try_get("table").unwrap_or_default(),
21            last_vacuum: row.try_get("last_vacuum").unwrap_or_default(),
22            last_autovacuum: row.try_get("last_autovacuum").unwrap_or_default(),
23            rowcount: row.try_get("rowcount").unwrap_or_default(),
24            dead_rowcount: row.try_get("dead_rowcount").unwrap_or_default(),
25            autovacuum_threshold: row.try_get("autovacuum_threshold").unwrap_or_default(),
26            expect_autovacuum: row.try_get("expect_autovacuum").unwrap_or_default(),
27        }
28    }
29
30    fn to_row(&self) -> prettytable::Row {
31        row![
32            self.schema,
33            self.table,
34            self.last_vacuum,
35            self.last_autovacuum,
36            self.rowcount,
37            self.dead_rowcount,
38            self.autovacuum_threshold,
39            self.expect_autovacuum
40        ]
41    }
42
43    fn headers() -> prettytable::Row {
44        row![
45            "schema",
46            "table",
47            "last_vacuum",
48            "last_autovacuum",
49            "rowcount",
50            "dead_rowcount",
51            "autovacuum_threshold",
52            "expect_autovacuum"
53        ]
54    }
55
56    fn read_file(_pg_statement_version: Option<PgStatsVersion>) -> String {
57        include_str!("../sql/vacuum_stats.sql").to_string()
58    }
59}