TryGetPgStatWAL retrieves pg_stat_wal on pg version 14 and further
()
| 599 | |
| 600 | // TryGetPgStatWAL retrieves pg_stat_wal on pg version 14 and further |
| 601 | func (instance *Instance) TryGetPgStatWAL() (*PgStatWal, error) { |
| 602 | version, err := instance.GetPgVersion() |
| 603 | if err != nil || version.Major() < 14 { |
| 604 | return nil, err |
| 605 | } |
| 606 | |
| 607 | db, err := instance.GetMetricsDB("postgres") |
| 608 | if err != nil { |
| 609 | return nil, err |
| 610 | } |
| 611 | |
| 612 | // Since PostgreSQL 18, `wal_write`, `wal_sync`, `wal_write_time` and |
| 613 | // `wal_sync_time` have been removed. |
| 614 | // See https://github.com/postgres/postgres/commit/2421e9a51d20bb83154e54a16ce628f9249fa907 |
| 615 | var pgWalStat PgStatWal |
| 616 | if version.Major() < 18 { |
| 617 | row := db.QueryRow( |
| 618 | `SELECT |
| 619 | wal_records, |
| 620 | wal_fpi, |
| 621 | wal_bytes, |
| 622 | wal_buffers_full, |
| 623 | wal_write, |
| 624 | wal_sync, |
| 625 | wal_write_time, |
| 626 | wal_sync_time, |
| 627 | stats_reset |
| 628 | FROM pg_catalog.pg_stat_wal`) |
| 629 | if err := row.Scan( |
| 630 | &pgWalStat.WalRecords, |
| 631 | &pgWalStat.WalFpi, |
| 632 | &pgWalStat.WalBytes, |
| 633 | &pgWalStat.WALBuffersFull, |
| 634 | &pgWalStat.WalWrite, |
| 635 | &pgWalStat.WalSync, |
| 636 | &pgWalStat.WalWriteTime, |
| 637 | &pgWalStat.WalSyncTime, |
| 638 | &pgWalStat.StatsReset, |
| 639 | ); err != nil { |
| 640 | return nil, EnrichMetricsConnError(err) |
| 641 | } |
| 642 | } |
| 643 | |
| 644 | if version.Major() >= 18 { |
| 645 | row := db.QueryRow( |
| 646 | `SELECT |
| 647 | wal_records, |
| 648 | wal_fpi, |
| 649 | wal_bytes, |
| 650 | wal_buffers_full, |
| 651 | stats_reset |
| 652 | FROM pg_catalog.pg_stat_wal`) |
| 653 | if err := row.Scan( |
| 654 | &pgWalStat.WalRecords, |
| 655 | &pgWalStat.WalFpi, |
| 656 | &pgWalStat.WalBytes, |
| 657 | &pgWalStat.WALBuffersFull, |
| 658 | &pgWalStat.StatsReset, |
no test coverage detected