@@ -554,4 +554,246 @@ SELECT pg_stat_get_live_tuples(:drop_stats_test_subxact_oid);
554
554
555
555
DROP TABLE trunc_stats_test, trunc_stats_test1, trunc_stats_test2, trunc_stats_test3, trunc_stats_test4;
556
556
DROP TABLE prevstats;
557
+ -----
558
+ -- Test that various stats views are being properly populated
559
+ -----
560
+ -- Test that sessions is incremented when a new session is started in pg_stat_database
561
+ SELECT sessions AS db_stat_sessions FROM pg_stat_database WHERE datname = (SELECT current_database()) \gset
562
+ \c
563
+ SELECT sessions > :db_stat_sessions FROM pg_stat_database WHERE datname = (SELECT current_database());
564
+ ?column?
565
+ ----------
566
+ t
567
+ (1 row)
568
+
569
+ -- Test pg_stat_bgwriter checkpointer-related stats, together with pg_stat_wal
570
+ SELECT checkpoints_req AS rqst_ckpts_before FROM pg_stat_bgwriter \gset
571
+ -- Test pg_stat_wal
572
+ SELECT wal_bytes AS wal_bytes_before FROM pg_stat_wal \gset
573
+ CREATE TABLE test_stats_temp AS SELECT 17;
574
+ DROP TABLE test_stats_temp;
575
+ -- Checkpoint twice: The checkpointer reports stats after reporting completion
576
+ -- of the checkpoint. But after a second checkpoint we'll see at least the
577
+ -- results of the first.
578
+ CHECKPOINT;
579
+ CHECKPOINT;
580
+ SELECT checkpoints_req > :rqst_ckpts_before FROM pg_stat_bgwriter;
581
+ ?column?
582
+ ----------
583
+ t
584
+ (1 row)
585
+
586
+ SELECT wal_bytes > :wal_bytes_before FROM pg_stat_wal;
587
+ ?column?
588
+ ----------
589
+ t
590
+ (1 row)
591
+
592
+ -----
593
+ -- Test that resetting stats works for reset timestamp
594
+ -----
595
+ -- Test that reset_slru with a specified SLRU works.
596
+ SELECT stats_reset AS slru_commit_ts_reset_ts FROM pg_stat_slru WHERE name = 'CommitTs' \gset
597
+ SELECT stats_reset AS slru_notify_reset_ts FROM pg_stat_slru WHERE name = 'Notify' \gset
598
+ SELECT pg_stat_reset_slru('CommitTs');
599
+ pg_stat_reset_slru
600
+ --------------------
601
+
602
+ (1 row)
603
+
604
+ SELECT stats_reset > :'slru_commit_ts_reset_ts'::timestamptz FROM pg_stat_slru WHERE name = 'CommitTs';
605
+ ?column?
606
+ ----------
607
+ t
608
+ (1 row)
609
+
610
+ SELECT stats_reset AS slru_commit_ts_reset_ts FROM pg_stat_slru WHERE name = 'CommitTs' \gset
611
+ -- Test that multiple SLRUs are reset when no specific SLRU provided to reset function
612
+ SELECT pg_stat_reset_slru(NULL);
613
+ pg_stat_reset_slru
614
+ --------------------
615
+
616
+ (1 row)
617
+
618
+ SELECT stats_reset > :'slru_commit_ts_reset_ts'::timestamptz FROM pg_stat_slru WHERE name = 'CommitTs';
619
+ ?column?
620
+ ----------
621
+ t
622
+ (1 row)
623
+
624
+ SELECT stats_reset > :'slru_notify_reset_ts'::timestamptz FROM pg_stat_slru WHERE name = 'Notify';
625
+ ?column?
626
+ ----------
627
+ t
628
+ (1 row)
629
+
630
+ -- Test that reset_shared with archiver specified as the stats type works
631
+ SELECT stats_reset AS archiver_reset_ts FROM pg_stat_archiver \gset
632
+ SELECT pg_stat_reset_shared('archiver');
633
+ pg_stat_reset_shared
634
+ ----------------------
635
+
636
+ (1 row)
637
+
638
+ SELECT stats_reset > :'archiver_reset_ts'::timestamptz FROM pg_stat_archiver;
639
+ ?column?
640
+ ----------
641
+ t
642
+ (1 row)
643
+
644
+ SELECT stats_reset AS archiver_reset_ts FROM pg_stat_archiver \gset
645
+ -- Test that reset_shared with bgwriter specified as the stats type works
646
+ SELECT stats_reset AS bgwriter_reset_ts FROM pg_stat_bgwriter \gset
647
+ SELECT pg_stat_reset_shared('bgwriter');
648
+ pg_stat_reset_shared
649
+ ----------------------
650
+
651
+ (1 row)
652
+
653
+ SELECT stats_reset > :'bgwriter_reset_ts'::timestamptz FROM pg_stat_bgwriter;
654
+ ?column?
655
+ ----------
656
+ t
657
+ (1 row)
658
+
659
+ SELECT stats_reset AS bgwriter_reset_ts FROM pg_stat_bgwriter \gset
660
+ -- Test that reset_shared with wal specified as the stats type works
661
+ SELECT stats_reset AS wal_reset_ts FROM pg_stat_wal \gset
662
+ SELECT pg_stat_reset_shared('wal');
663
+ pg_stat_reset_shared
664
+ ----------------------
665
+
666
+ (1 row)
667
+
668
+ SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
669
+ ?column?
670
+ ----------
671
+ t
672
+ (1 row)
673
+
674
+ SELECT stats_reset AS wal_reset_ts FROM pg_stat_wal \gset
675
+ -- Test that reset_shared with no specified stats type doesn't reset anything
676
+ SELECT pg_stat_reset_shared(NULL);
677
+ pg_stat_reset_shared
678
+ ----------------------
679
+
680
+ (1 row)
681
+
682
+ SELECT stats_reset = :'archiver_reset_ts'::timestamptz FROM pg_stat_archiver;
683
+ ?column?
684
+ ----------
685
+ t
686
+ (1 row)
687
+
688
+ SELECT stats_reset = :'bgwriter_reset_ts'::timestamptz FROM pg_stat_bgwriter;
689
+ ?column?
690
+ ----------
691
+ t
692
+ (1 row)
693
+
694
+ SELECT stats_reset = :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
695
+ ?column?
696
+ ----------
697
+ t
698
+ (1 row)
699
+
700
+ -- Test that reset works for pg_stat_database
701
+ -- Since pg_stat_database stats_reset starts out as NULL, reset it once first so we have something to compare it to
702
+ SELECT pg_stat_reset();
703
+ pg_stat_reset
704
+ ---------------
705
+
706
+ (1 row)
707
+
708
+ SELECT stats_reset AS db_reset_ts FROM pg_stat_database WHERE datname = (SELECT current_database()) \gset
709
+ SELECT pg_stat_reset();
710
+ pg_stat_reset
711
+ ---------------
712
+
713
+ (1 row)
714
+
715
+ SELECT stats_reset > :'db_reset_ts'::timestamptz FROM pg_stat_database WHERE datname = (SELECT current_database());
716
+ ?column?
717
+ ----------
718
+ t
719
+ (1 row)
720
+
721
+ ----
722
+ -- pg_stat_get_snapshot_timestamp behavior
723
+ ----
724
+ BEGIN;
725
+ SET LOCAL stats_fetch_consistency = snapshot;
726
+ -- no snapshot yet, return NULL
727
+ SELECT pg_stat_get_snapshot_timestamp();
728
+ pg_stat_get_snapshot_timestamp
729
+ --------------------------------
730
+
731
+ (1 row)
732
+
733
+ -- any attempt at accessing stats will build snapshot
734
+ SELECT pg_stat_get_function_calls(0);
735
+ pg_stat_get_function_calls
736
+ ----------------------------
737
+
738
+ (1 row)
739
+
740
+ SELECT pg_stat_get_snapshot_timestamp() >= NOW();
741
+ ?column?
742
+ ----------
743
+ t
744
+ (1 row)
745
+
746
+ -- shows NULL again after clearing
747
+ SELECT pg_stat_clear_snapshot();
748
+ pg_stat_clear_snapshot
749
+ ------------------------
750
+
751
+ (1 row)
752
+
753
+ SELECT pg_stat_get_snapshot_timestamp();
754
+ pg_stat_get_snapshot_timestamp
755
+ --------------------------------
756
+
757
+ (1 row)
758
+
759
+ COMMIT;
760
+ ----
761
+ -- pg_stat_have_stats behavior
762
+ ----
763
+ -- fixed-numbered stats exist
764
+ SELECT pg_stat_have_stats('bgwriter', 0, 0);
765
+ pg_stat_have_stats
766
+ --------------------
767
+ t
768
+ (1 row)
769
+
770
+ -- unknown stats kinds error out
771
+ SELECT pg_stat_have_stats('zaphod', 0, 0);
772
+ ERROR: invalid statistics kind: "zaphod"
773
+ -- db stats have objoid 0
774
+ SELECT pg_stat_have_stats('database', (SELECT oid FROM pg_database WHERE datname = current_database()), 1);
775
+ pg_stat_have_stats
776
+ --------------------
777
+ f
778
+ (1 row)
779
+
780
+ SELECT pg_stat_have_stats('database', (SELECT oid FROM pg_database WHERE datname = current_database()), 0);
781
+ pg_stat_have_stats
782
+ --------------------
783
+ t
784
+ (1 row)
785
+
786
+ -- ensure that stats accessors handle NULL input correctly
787
+ SELECT pg_stat_get_replication_slot(NULL);
788
+ pg_stat_get_replication_slot
789
+ ------------------------------
790
+
791
+ (1 row)
792
+
793
+ SELECT pg_stat_get_subscription_stats(NULL);
794
+ pg_stat_get_subscription_stats
795
+ --------------------------------
796
+
797
+ (1 row)
798
+
557
799
-- End of Stats Test
0 commit comments