Move information about pgstats kinds into its own header pgstat_kind.h
authorMichael Paquier <[email protected]>
Tue, 14 Jan 2025 03:43:07 +0000 (12:43 +0900)
committerMichael Paquier <[email protected]>
Tue, 14 Jan 2025 03:43:07 +0000 (12:43 +0900)
This includes all the definitions for the various PGSTAT_KIND_* values,
the range allowed for custom stats kinds and some macros related all
that.

One use-case behind this split is the possibility to use this
information for frontend tools, without having to rely on pgstat.h and a
backend footprint.

Author: Michael Paquier
Reviewed-by: Bertrand Drouvot
Discussion: https://postgr.es/m/[email protected]

src/include/pgstat.h
src/include/utils/pgstat_kind.h [new file with mode: 0644]

index 7cd9396aced1d9e976dee772cd692da4347ecf3c..3c411ae5194b715e990e8ae310f96f831e0df4ea 100644 (file)
@@ -18,6 +18,7 @@
 #include "replication/conflict.h"
 #include "utils/backend_progress.h" /* for backward compatibility */
 #include "utils/backend_status.h"      /* for backward compatibility */
+#include "utils/pgstat_kind.h"
 #include "utils/relcache.h"
 #include "utils/wait_event.h"  /* for backward compatibility */
 
 /* Default directory to store temporary statistics data in */
 #define PG_STAT_TMP_DIR                "pg_stat_tmp"
 
-/* The types of statistics entries */
-#define PgStat_Kind uint32
-
-/* Range of IDs allowed, for built-in and custom kinds */
-#define PGSTAT_KIND_MIN        1               /* Minimum ID allowed */
-#define PGSTAT_KIND_MAX        256             /* Maximum ID allowed */
-
-/* use 0 for INVALID, to catch zero-initialized data */
-#define PGSTAT_KIND_INVALID 0
-
-/* stats for variable-numbered objects */
-#define PGSTAT_KIND_DATABASE   1       /* database-wide statistics */
-#define PGSTAT_KIND_RELATION   2       /* per-table statistics */
-#define PGSTAT_KIND_FUNCTION   3       /* per-function statistics */
-#define PGSTAT_KIND_REPLSLOT   4       /* per-slot statistics */
-#define PGSTAT_KIND_SUBSCRIPTION       5       /* per-subscription statistics */
-#define PGSTAT_KIND_BACKEND    6       /* per-backend statistics */
-
-/* stats for fixed-numbered objects */
-#define PGSTAT_KIND_ARCHIVER   7
-#define PGSTAT_KIND_BGWRITER   8
-#define PGSTAT_KIND_CHECKPOINTER       9
-#define PGSTAT_KIND_IO 10
-#define PGSTAT_KIND_SLRU       11
-#define PGSTAT_KIND_WAL        12
-
-#define PGSTAT_KIND_BUILTIN_MIN PGSTAT_KIND_DATABASE
-#define PGSTAT_KIND_BUILTIN_MAX PGSTAT_KIND_WAL
-#define PGSTAT_KIND_BUILTIN_SIZE (PGSTAT_KIND_BUILTIN_MAX + 1)
-
-/* Custom stats kinds */
-
-/* Range of IDs allowed for custom stats kinds */
-#define PGSTAT_KIND_CUSTOM_MIN 128
-#define PGSTAT_KIND_CUSTOM_MAX PGSTAT_KIND_MAX
-#define PGSTAT_KIND_CUSTOM_SIZE        (PGSTAT_KIND_CUSTOM_MAX - PGSTAT_KIND_CUSTOM_MIN + 1)
-
-/*
- * PgStat_Kind to use for extensions that require an ID, but are still in
- * development and have not reserved their own unique kind ID yet. See:
- * https://wiki.postgresql.org/wiki/CustomCumulativeStats
- */
-#define PGSTAT_KIND_EXPERIMENTAL       128
-
-static inline bool
-pgstat_is_kind_builtin(PgStat_Kind kind)
-{
-       return kind >= PGSTAT_KIND_BUILTIN_MIN && kind <= PGSTAT_KIND_BUILTIN_MAX;
-}
-
-static inline bool
-pgstat_is_kind_custom(PgStat_Kind kind)
-{
-       return kind >= PGSTAT_KIND_CUSTOM_MIN && kind <= PGSTAT_KIND_CUSTOM_MAX;
-}
-
 /* Values for track_functions GUC variable --- order is significant! */
 typedef enum TrackFunctionsLevel
 {
diff --git a/src/include/utils/pgstat_kind.h b/src/include/utils/pgstat_kind.h
new file mode 100644 (file)
index 0000000..f44169f
--- /dev/null
@@ -0,0 +1,72 @@
+/* ----------
+ *     pgstat_kind.h
+ *
+ *     Definitions related to the statistics kinds for the PostgreSQL
+ *     cumulative statistics system.  Can be included in backend or
+ *     frontend code.
+ *
+ *     Copyright (c) 2001-2025, PostgreSQL Global Development Group
+ *
+ *     src/include/utils/pgstat_kind.h
+ * ----------
+ */
+#ifndef PGSTAT_KIND_H
+#define PGSTAT_KIND_H
+
+/* The types of statistics entries */
+#define PgStat_Kind uint32
+
+/* Range of IDs allowed, for built-in and custom kinds */
+#define PGSTAT_KIND_MIN        1               /* Minimum ID allowed */
+#define PGSTAT_KIND_MAX        256             /* Maximum ID allowed */
+
+/* use 0 for INVALID, to catch zero-initialized data */
+#define PGSTAT_KIND_INVALID 0
+
+/* stats for variable-numbered objects */
+#define PGSTAT_KIND_DATABASE   1       /* database-wide statistics */
+#define PGSTAT_KIND_RELATION   2       /* per-table statistics */
+#define PGSTAT_KIND_FUNCTION   3       /* per-function statistics */
+#define PGSTAT_KIND_REPLSLOT   4       /* per-slot statistics */
+#define PGSTAT_KIND_SUBSCRIPTION       5       /* per-subscription statistics */
+#define PGSTAT_KIND_BACKEND    6       /* per-backend statistics */
+
+/* stats for fixed-numbered objects */
+#define PGSTAT_KIND_ARCHIVER   7
+#define PGSTAT_KIND_BGWRITER   8
+#define PGSTAT_KIND_CHECKPOINTER       9
+#define PGSTAT_KIND_IO 10
+#define PGSTAT_KIND_SLRU       11
+#define PGSTAT_KIND_WAL        12
+
+#define PGSTAT_KIND_BUILTIN_MIN PGSTAT_KIND_DATABASE
+#define PGSTAT_KIND_BUILTIN_MAX PGSTAT_KIND_WAL
+#define PGSTAT_KIND_BUILTIN_SIZE (PGSTAT_KIND_BUILTIN_MAX + 1)
+
+/* Custom stats kinds */
+
+/* Range of IDs allowed for custom stats kinds */
+#define PGSTAT_KIND_CUSTOM_MIN 128
+#define PGSTAT_KIND_CUSTOM_MAX PGSTAT_KIND_MAX
+#define PGSTAT_KIND_CUSTOM_SIZE        (PGSTAT_KIND_CUSTOM_MAX - PGSTAT_KIND_CUSTOM_MIN + 1)
+
+/*
+ * PgStat_Kind to use for extensions that require an ID, but are still in
+ * development and have not reserved their own unique kind ID yet. See:
+ * https://wiki.postgresql.org/wiki/CustomCumulativeStats
+ */
+#define PGSTAT_KIND_EXPERIMENTAL       128
+
+static inline bool
+pgstat_is_kind_builtin(PgStat_Kind kind)
+{
+       return kind >= PGSTAT_KIND_BUILTIN_MIN && kind <= PGSTAT_KIND_BUILTIN_MAX;
+}
+
+static inline bool
+pgstat_is_kind_custom(PgStat_Kind kind)
+{
+       return kind >= PGSTAT_KIND_CUSTOM_MIN && kind <= PGSTAT_KIND_CUSTOM_MAX;
+}
+
+#endif                                                 /* PGSTAT_KIND_H */