From 05d0bca68096dba522075fa76ff1af490a050107 Mon Sep 17 00:00:00 2001
From: Vik Fearing <vik@postgresfriends.org>
Date: Fri, 13 Nov 2020 11:56:03 +0100
Subject: [PATCH 2/2] Add catalog_version guc, accessible from SQL

---
 doc/src/sgml/config.sgml         | 14 ++++++++++++++
 src/backend/utils/misc/check_guc |  2 +-
 src/backend/utils/misc/guc.c     | 14 ++++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index e81141e45c..0b877b531c 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -9725,6 +9725,20 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
       </listitem>
      </varlistentry>
 
+     <varlistentry id="guc-catalog-version" xreflabel="catalog_version">
+      <term><varname>catalog_version</varname> (<type>string</type>)
+      <indexterm>
+       <primary><varname>catalog_version</varname> configuration parameter</primary>
+      </indexterm>
+      </term>
+      <listitem>
+       <para>
+        Reports the catalog version of the server. It is determined by the
+        value of <literal>CATALOG_VERSION_NO</literal> when building the server.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry id="guc-data-checksums" xreflabel="data_checksums">
       <term><varname>data_checksums</varname> (<type>boolean</type>)
       <indexterm>
diff --git a/src/backend/utils/misc/check_guc b/src/backend/utils/misc/check_guc
index b171ef0e4f..a45f7f1727 100755
--- a/src/backend/utils/misc/check_guc
+++ b/src/backend/utils/misc/check_guc
@@ -16,7 +16,7 @@
 ## if an option is valid but shows up in only one file (guc.c but not
 ## postgresql.conf.sample), it should be listed here so that it
 ## can be ignored
-INTENTIONALLY_NOT_INCLUDED="debug_deadlocks in_hot_standby \
+INTENTIONALLY_NOT_INCLUDED="catalog_version_num debug_deadlocks in_hot_standby \
 is_superuser lc_collate lc_ctype lc_messages lc_monetary lc_numeric lc_time \
 pre_auth_delay role seed server_encoding server_version server_version_num \
 session_authorization trace_lock_oidmin trace_lock_table trace_locks trace_lwlocks \
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 00018abb7d..a619a17922 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -37,6 +37,7 @@
 #include "access/twophase.h"
 #include "access/xact.h"
 #include "access/xlog_internal.h"
+#include "catalog/catversion.h"
 #include "catalog/namespace.h"
 #include "catalog/pg_authid.h"
 #include "catalog/storage.h"
@@ -598,6 +599,7 @@ static char *locale_ctype;
 static char *server_encoding_string;
 static char *server_version_string;
 static int	server_version_num;
+static int	catalog_version_no;
 static char *timezone_string;
 static char *log_timezone_string;
 static char *timezone_abbreviations_string;
@@ -3367,6 +3369,18 @@ static struct config_int ConfigureNamesInt[] =
 		NULL, NULL, NULL
 	},
 
+	{
+		/* Can't be set in postgresql.conf */
+		{"catalog_version", PGC_INTERNAL, PRESET_OPTIONS,
+			gettext_noop("Shows the catalog version number."),
+			NULL,
+			GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+		},
+		&catalog_version_no,
+		CATALOG_VERSION_NO, CATALOG_VERSION_NO, CATALOG_VERSION_NO,
+		NULL, NULL, NULL
+	},
+
 	{
 		{"log_temp_files", PGC_SUSET, LOGGING_WHAT,
 			gettext_noop("Log the use of temporary files larger than this number of kilobytes."),
-- 
2.25.1

