diff --git a/postgresql-14.0_orig/doc/src/sgml/install-windows.sgml b/postgresql-14.0_vs2022/doc/src/sgml/install-windows.sgml
index 312edc6..940836a 100644
--- a/postgresql-14.0_orig/doc/src/sgml/install-windows.sgml
+++ b/postgresql-14.0_vs2022/doc/src/sgml/install-windows.sgml
@@ -20,9 +20,9 @@
  <para>
   There are several different ways of building PostgreSQL on
   <productname>Windows</productname>. The simplest way to build with
-  Microsoft tools is to install <productname>Visual Studio 2019</productname>
+  Microsoft tools is to install <productname>Visual Studio 2022</productname>
   and use the included compiler. It is also possible to build with the full
-  <productname>Microsoft Visual C++ 2013 to 2019</productname>.
+  <productname>Microsoft Visual C++ 2013 to 2022</productname>.
   In some cases that requires the installation of the
   <productname>Windows SDK</productname> in addition to the compiler.
  </para>
@@ -69,7 +69,7 @@
   <productname>Microsoft Windows SDK</productname>. If you do not already have a
   <productname>Visual Studio</productname> environment set up, the easiest
   ways are to use the compilers from
-  <productname>Visual Studio 2019</productname> or those in the
+  <productname>Visual Studio 2022</productname> or those in the
   <productname>Windows SDK 10</productname>, which are both free downloads
   from Microsoft.
  </para>
@@ -78,7 +78,7 @@
   Both 32-bit and 64-bit builds are possible with the Microsoft Compiler suite.
   32-bit PostgreSQL builds are possible with
   <productname>Visual Studio 2013</productname> to
-  <productname>Visual Studio 2019</productname>,
+  <productname>Visual Studio 2022</productname>,
   as well as standalone Windows SDK releases 8.1a to 10.
   64-bit PostgreSQL builds are supported with
   <productname>Microsoft Windows SDK</productname> version 8.1a to 10 or
@@ -86,7 +86,7 @@
   is supported down to <productname>Windows 7</productname> and
   <productname>Windows Server 2008 R2 SP1</productname> when building with
   <productname>Visual Studio 2013</productname> to
-  <productname>Visual Studio 2019</productname>.
+  <productname>Visual Studio 2022</productname>.
    <!--
        For 2013 requirements:
        https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-sysrequirements-vs
@@ -96,6 +96,8 @@
        https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2017-system-requirements-vs
        For 2019 requirements:
        https://docs.microsoft.com/en-us/visualstudio/releases/2019/system-requirements
+       For 2022 requirements:
+       https://docs.microsoft.com/en-us/visualstudio/releases/2022/system-requirements
    -->
  </para>
 
diff --git a/postgresql-14.0_orig/src/tools/msvc/MSBuildProject.pm b/postgresql-14.0_vs2022/src/tools/msvc/MSBuildProject.pm
index ebe6530..52f8ec2 100644
--- a/postgresql-14.0_orig/src/tools/msvc/MSBuildProject.pm
+++ b/postgresql-14.0_vs2022/src/tools/msvc/MSBuildProject.pm
@@ -508,4 +508,30 @@ sub new
 	return $self;
 }
 
+
+package VC2022Project;
+
+#
+# Package that encapsulates a Visual C++ 2022 project file
+#
+
+use strict;
+use warnings;
+use base qw(MSBuildProject);
+
+no warnings qw(redefine);    ## no critic
+
+sub new
+{
+	my $classname = shift;
+	my $self      = $classname->SUPER::_new(@_);
+	bless($self, $classname);
+
+	$self->{vcver}           = '17.00';
+	$self->{PlatformToolset} = 'v143';
+	$self->{ToolsVersion}    = '17.0';
+
+	return $self;
+}
+
 1;
diff --git a/postgresql-14.0_orig/src/tools/msvc/README b/postgresql-14.0_vs2022/src/tools/msvc/README
index f154759..34ea4d5 100644
--- a/postgresql-14.0_orig/src/tools/msvc/README
+++ b/postgresql-14.0_vs2022/src/tools/msvc/README
@@ -4,7 +4,7 @@ MSVC build
 ==========
 
 This directory contains the tools required to build PostgreSQL using
-Microsoft Visual Studio 2013 - 2019. This builds the whole backend, not just
+Microsoft Visual Studio 2013 - 2022. This builds the whole backend, not just
 the libpq frontend library. For more information, see the documentation
 chapter "Installation on Windows" and the description below.
 
@@ -89,10 +89,10 @@ These configuration arguments are passed over to Mkvcbuild::mkvcbuild
 (Mkvcbuild.pm) which creates the Visual Studio project and solution files.
 It does this by using VSObjectFactory::CreateSolution to create an object
 implementing the Solution interface (this could be either VS2013Solution,
-VS2015Solution, VS2017Solution or VS2019Solution, all in Solution.pm,
+VS2015Solution, VS2017Solution, VS2019Solution or VS2022Solution, all in Solution.pm,
 depending on the user's build environment) and adding objects implementing
 the corresponding Project interface (VC2013Project, VC2015Project,
-VC2017Project or VC2019Project from MSBuildProject.pm) to it.
+VC2017Project,VC2019Project or VC2022Project from MSBuildProject.pm) to it.
 When Solution::Save is called, the implementations of Solution and Project
 save their content in the appropriate format.
 The final step of starting the appropriate build program (msbuild) is
diff --git a/postgresql-14.0_orig/src/tools/msvc/Solution.pm b/postgresql-14.0_vs2022/src/tools/msvc/Solution.pm
index cfda5ac..a95754d 100644
--- a/postgresql-14.0_orig/src/tools/msvc/Solution.pm
+++ b/postgresql-14.0_vs2022/src/tools/msvc/Solution.pm
@@ -1315,6 +1315,34 @@ sub new
 	return $self;
 }
 
+package VS2022Solution;
+
+#
+# Package that encapsulates a Visual Studio 2022 solution file
+#
+
+use Carp;
+use strict;
+use warnings;
+use base qw(Solution);
+
+no warnings qw(redefine);    ## no critic
+
+sub new
+{
+	my $classname = shift;
+	my $self      = $classname->SUPER::_new(@_);
+	bless($self, $classname);
+
+	$self->{solutionFileVersion}        = '12.00';
+	$self->{vcver}                      = '17.00';
+	$self->{visualStudioName}           = 'Visual Studio 2022';
+	$self->{VisualStudioVersion}        = '17.0.31825.309';
+	$self->{MinimumVisualStudioVersion} = '10.0.40219.1';
+
+	return $self;
+}
+
 sub GetAdditionalHeaders
 {
 	my ($self, $f) = @_;
diff --git a/postgresql-14.0_orig/src/tools/msvc/VSObjectFactory.pm b/postgresql-14.0_vs2022/src/tools/msvc/VSObjectFactory.pm
index 61e83f5..f78e08c 100644
--- a/postgresql-14.0_orig/src/tools/msvc/VSObjectFactory.pm
+++ b/postgresql-14.0_vs2022/src/tools/msvc/VSObjectFactory.pm
@@ -61,6 +61,16 @@ sub CreateSolution
 	{
 		return new VS2019Solution(@_);
 	}
+
+	# The version of nmake bundled in Visual Studio 2022 is greater
+	# than 14.30 and less than 14.40.  And the version number is
+	# actually 17.00.
+	elsif (
+		($visualStudioVersion ge '14.30' && $visualStudioVersion lt '14.40')
+		|| $visualStudioVersion eq '17.00')
+	{
+		return new VS2022Solution(@_);
+	}
 	else
 	{
 		croak
@@ -105,6 +115,16 @@ sub CreateProject
 	{
 		return new VC2019Project(@_);
 	}
+
+	# The version of nmake bundled in Visual Studio 2022 is greater
+	# than 14.30 and less than 14.40.  And the version number is
+	# actually 17.00.
+	elsif (
+		($visualStudioVersion ge '14.30' && $visualStudioVersion lt '14.40')
+		|| $visualStudioVersion eq '17.00')
+	{
+		return new VC2022Project(@_);
+	}
 	else
 	{
 		croak
@@ -134,7 +154,7 @@ sub DetermineVisualStudioVersion
 	else
 	{
 		# fake version
-		return '16.00';
+		return '17.00';
 	}
 }
 
@@ -143,13 +163,13 @@ sub _GetVisualStudioVersion
 	my ($major, $minor) = @_;
 
 	# The major visual studio that is supported has nmake
-	# version <= 14.30, so stick with it as the latest version
+	# version < 14.40, so stick with it as the latest version
 	# if bumping on something even newer.
-	if ($major >= 14 && $minor >= 30)
+	if ($major >= 14 && $minor >= 40)
 	{
 		carp
 		  "The determined version of Visual Studio is newer than the latest supported version. Returning the latest supported version instead.";
-		return '14.20';
+		return '14.30';
 	}
 	elsif ($major < 12)
 	{
