Move information about pgstats kinds into its own header pgstat_kind.h
authorMichael Paquier <michael@paquier.xyz>
Tue, 14 Jan 2025 03:43:07 +0000 (12:43 +0900)
committerMichael Paquier <michael@paquier.xyz>
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/Z24fyb3ipXKR38oS@paquier.xyz

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 */