diff --git a/configure b/configure
index 7244c755a76378e72e947f2aa6dd39c69011c64c..45c8eefad7234270a977801069f3f6d60d2cfdc5 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for PostgreSQL 9.6beta4.
+# Generated by GNU Autoconf 2.69 for PostgreSQL 10devel.
 #
 # Report bugs to <pgsql-bugs@postgresql.org>.
 #
@@ -582,8 +582,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='PostgreSQL'
 PACKAGE_TARNAME='postgresql'
-PACKAGE_VERSION='9.6beta4'
-PACKAGE_STRING='PostgreSQL 9.6beta4'
+PACKAGE_VERSION='10devel'
+PACKAGE_STRING='PostgreSQL 10devel'
 PACKAGE_BUGREPORT='pgsql-bugs@postgresql.org'
 PACKAGE_URL=''
 
@@ -1398,7 +1398,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures PostgreSQL 9.6beta4 to adapt to many kinds of systems.
+\`configure' configures PostgreSQL 10devel to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1463,7 +1463,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of PostgreSQL 9.6beta4:";;
+     short | recursive ) echo "Configuration of PostgreSQL 10devel:";;
    esac
   cat <<\_ACEOF
 
@@ -1615,7 +1615,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-PostgreSQL configure 9.6beta4
+PostgreSQL configure 10devel
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2326,7 +2326,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by PostgreSQL $as_me 9.6beta4, which was
+It was created by PostgreSQL $as_me 10devel, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2711,7 +2711,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 configure_args=$ac_configure_args
 
 
-PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\.[0-9][0-9]*\)'`
+PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\)'`
 
 
 cat >>confdefs.h <<_ACEOF
@@ -16433,7 +16433,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by PostgreSQL $as_me 9.6beta4, which was
+This file was extended by PostgreSQL $as_me 10devel, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -16503,7 +16503,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-PostgreSQL config.status 9.6beta4
+PostgreSQL config.status 10devel
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.in b/configure.in
index 598fbd8f640770165840bca83ed6a68dd25b4c93..c878b4e377cb32f31effec54f340b35c11ab270c 100644
--- a/configure.in
+++ b/configure.in
@@ -17,7 +17,7 @@ dnl Read the Autoconf manual for details.
 dnl
 m4_pattern_forbid(^PGAC_)dnl to catch undefined macros
 
-AC_INIT([PostgreSQL], [9.6beta4], [pgsql-bugs@postgresql.org])
+AC_INIT([PostgreSQL], [10devel], [pgsql-bugs@postgresql.org])
 
 m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required.
 Untested combinations of 'autoconf' and PostgreSQL versions are not
@@ -29,7 +29,7 @@ AC_CONFIG_AUX_DIR(config)
 AC_PREFIX_DEFAULT(/usr/local/pgsql)
 AC_SUBST(configure_args, [$ac_configure_args])
 
-[PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\.[0-9][0-9]*\)'`]
+[PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\)'`]
 AC_SUBST(PG_MAJORVERSION)
 AC_DEFINE_UNQUOTED(PG_MAJORVERSION, "$PG_MAJORVERSION", [PostgreSQL major version as a string])
 
diff --git a/doc/bug.template b/doc/bug.template
index 55347721968e3f59cf5bc55a08d433fcc1f51552..8e7401e1ce8dd7d41f59edac9354bc4f1b5b0781 100644
--- a/doc/bug.template
+++ b/doc/bug.template
@@ -27,7 +27,7 @@ System Configuration:
 
   Operating System (example: Linux 2.4.18)	:
 
-  PostgreSQL version (example: PostgreSQL 9.6beta4):  PostgreSQL 9.6beta4
+  PostgreSQL version (example: PostgreSQL 10devel):  PostgreSQL 10devel
 
   Compiler used (example: gcc 3.3.5)		:
 
diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
index 8ba95e1b84f7dce57e3c74e815a90fd95fb4af68..66fbe441ac2025a0e6207d6265dc47015adb777c 100644
--- a/doc/src/sgml/runtime.sgml
+++ b/doc/src/sgml/runtime.sgml
@@ -1601,17 +1601,26 @@ $ <userinput>kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`</userinput
   </para>
 
   <para>
-   <productname>PostgreSQL</> major versions are represented by the
-   first two digit groups of the version number, e.g., 8.4.
-   <productname>PostgreSQL</> minor versions are represented by the
-   third group of version digits, e.g., 8.4.2 is the second minor
-   release of 8.4.  Minor releases never change the internal storage
-   format and are always compatible with earlier and later minor
-   releases of the same major version number, e.g., 8.4.2 is compatible
-   with 8.4, 8.4.1 and 8.4.6.  To update between compatible versions,
-   you simply replace the executables while the server is down and
-   restart the server.  The data directory remains unchanged &mdash;
-   minor upgrades are that simple.
+   Current <productname>PostgreSQL</productname> version numbers consist of a
+   major and a minor version number.  For example, in the version number 10.1,
+   the 10 is the major version number and the 1 is the minor version number,
+   meaning this would be the first minor release of the major release 10.  For
+   releases before <productname>PostgreSQL</productname> version 10.0, version
+   numbers consist of three numbers, for example, 9.5.3.  In those cases, the
+   major version consists of the first two digit groups of the version number,
+   e.g., 9.5, and the minor version is the third number, e.g., 3, meaning this
+   would be the third minor release of the major release 9.5.
+  </para>
+
+  <para>
+   Minor releases never change the internal storage format and are always
+   compatible with earlier and later minor releases of the same major version
+   number.  For example, version 10.1 is compatible with version 10.0 and
+   version 10.6.  Similarly, for example, 9.5.3 is compatible with 9.5.0,
+   9.5.1, and 9.5.6.  To update between compatible versions, you simply
+   replace the executables while the server is down and restart the server.
+   The data directory remains unchanged &mdash; minor upgrades are that
+   simple.
   </para>
 
   <para>
diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl
index 54a14e5dc368ab265ac76f14b96ca508850a6fd1..26d165203dcd76b4c33bd4efdd9d8daab03ce647 100644
--- a/src/backend/catalog/genbki.pl
+++ b/src/backend/catalog/genbki.pl
@@ -43,8 +43,8 @@ while (@ARGV)
 	elsif ($arg =~ /^--set-version=(.*)$/)
 	{
 		$major_version = $1;
-		die "Version must be in format nn.nn.\n"
-		  if !($major_version =~ /^\d+\.\d+$/);
+		die "Invalid version string.\n"
+		  if !($major_version =~ /^\d+$/);
 	}
 	else
 	{
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index d4625a6238f8d284998a536834050516fc0950c0..22b046e006e50be49c0615d271ed8963c97192c2 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -1334,16 +1334,13 @@ ValidatePgVersion(const char *path)
 	char		full_path[MAXPGPATH];
 	FILE	   *file;
 	int			ret;
-	long		file_major,
-				file_minor;
-	long		my_major = 0,
-				my_minor = 0;
+	long		file_major;
+	long		my_major;
 	char	   *endptr;
-	const char *version_string = PG_VERSION;
+	char		file_version_string[64];
+	const char *my_version_string = PG_VERSION;
 
-	my_major = strtol(version_string, &endptr, 10);
-	if (*endptr == '.')
-		my_minor = strtol(endptr + 1, NULL, 10);
+	my_major = strtol(my_version_string, &endptr, 10);
 
 	snprintf(full_path, sizeof(full_path), "%s/PG_VERSION", path);
 
@@ -1362,8 +1359,11 @@ ValidatePgVersion(const char *path)
 					 errmsg("could not open file \"%s\": %m", full_path)));
 	}
 
-	ret = fscanf(file, "%ld.%ld", &file_major, &file_minor);
-	if (ret != 2)
+	file_version_string[0] = '\0';
+	ret = fscanf(file, "%63s", file_version_string);
+	file_major = strtol(file_version_string, &endptr, 10);
+
+	if (ret != 1 || endptr == file_version_string)
 		ereport(FATAL,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("\"%s\" is not a valid data directory",
@@ -1374,13 +1374,13 @@ ValidatePgVersion(const char *path)
 
 	FreeFile(file);
 
-	if (my_major != file_major || my_minor != file_minor)
+	if (my_major != file_major)
 		ereport(FATAL,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("database files are incompatible with server"),
-				 errdetail("The data directory was initialized by PostgreSQL version %ld.%ld, "
+				 errdetail("The data directory was initialized by PostgreSQL version %s, "
 						   "which is not compatible with this version %s.",
-						   file_major, file_minor, version_string)));
+						   file_version_string, my_version_string)));
 }
 
 /*-------------------------------------------------------------------------
diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
index f901e3c51251b9ff8bdc7f8bef74162a99418143..ed41dee6a5489e611c5bde95d5109132aac4b62a 100644
--- a/src/bin/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -1082,8 +1082,8 @@ get_bin_version(ClusterInfo *cluster)
 	char		cmd[MAXPGPATH],
 				cmd_output[MAX_STRING];
 	FILE	   *output;
-	int			pre_dot,
-				post_dot;
+	int			pre_dot = 0,
+				post_dot = 0;
 
 	snprintf(cmd, sizeof(cmd), "\"%s/pg_ctl\" --version", cluster->bindir);
 
@@ -1098,7 +1098,7 @@ get_bin_version(ClusterInfo *cluster)
 	if (strchr(cmd_output, '\n') != NULL)
 		*strchr(cmd_output, '\n') = '\0';
 
-	if (sscanf(cmd_output, "%*s %*s %d.%d", &pre_dot, &post_dot) != 2)
+	if (sscanf(cmd_output, "%*s %*s %d.%d", &pre_dot, &post_dot) < 1)
 		pg_fatal("could not get version from %s\n", cmd);
 
 	cluster->bin_version = (pre_dot * 100 + post_dot) * 100;
diff --git a/src/bin/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c
index 830335f50195f56fef97d667cb914cb2f5b7c7df..12432bb1d07983c87078311191d8a72633d71e08 100644
--- a/src/bin/pg_upgrade/server.c
+++ b/src/bin/pg_upgrade/server.c
@@ -166,7 +166,7 @@ get_major_server_version(ClusterInfo *cluster)
 
 	if (fscanf(version_fd, "%63s", cluster->major_version_str) == 0 ||
 		sscanf(cluster->major_version_str, "%d.%d", &integer_version,
-			   &fractional_version) != 2)
+			   &fractional_version) < 1)
 		pg_fatal("could not get version from %s\n", cluster->pgdata);
 
 	fclose(version_fd);
diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32
index b6b88fcf0d2b6be087634dc7b95d1b03e298d8a8..8892c3cb4fa453b614cdc5a35db202952d5072e9 100644
--- a/src/include/pg_config.h.win32
+++ b/src/include/pg_config.h.win32
@@ -554,10 +554,10 @@
 #define PACKAGE_NAME "PostgreSQL"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "PostgreSQL 9.6beta4"
+#define PACKAGE_STRING "PostgreSQL 10devel"
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "9.6beta4"
+#define PACKAGE_VERSION "10devel"
 
 /* Define to the name of a signed 128-bit integer type. */
 #undef PG_INT128_TYPE
@@ -566,10 +566,10 @@
 #define PG_INT64_TYPE long long int
 
 /* PostgreSQL version as a string */
-#define PG_VERSION "9.6beta4"
+#define PG_VERSION "10devel"
 
 /* PostgreSQL version as a number */
-#define PG_VERSION_NUM 90600
+#define PG_VERSION_NUM 100000
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "postgresql"
diff --git a/src/interfaces/libpq/libpq.rc.in b/src/interfaces/libpq/libpq.rc.in
index e41a1a27f45e4af9871b12bef14f02fafb5dad09..0d6f7049f55c05e2627398070946569d51cfed27 100644
--- a/src/interfaces/libpq/libpq.rc.in
+++ b/src/interfaces/libpq/libpq.rc.in
@@ -1,8 +1,8 @@
 #include <winver.h>
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 9,6,0,0
- PRODUCTVERSION 9,6,0,0
+ FILEVERSION 10,0,0,0
+ PRODUCTVERSION 10,0,0,0
  FILEFLAGSMASK 0x3fL
  FILEFLAGS 0
  FILEOS VOS__WINDOWS32
@@ -15,13 +15,13 @@ BEGIN
         BEGIN
             VALUE "CompanyName", "\0"
             VALUE "FileDescription", "PostgreSQL Access Library\0"
-            VALUE "FileVersion", "9.6.0\0"
+            VALUE "FileVersion", "10.0\0"
             VALUE "InternalName", "libpq\0"
             VALUE "LegalCopyright", "Copyright (C) 2016\0"
             VALUE "LegalTrademarks", "\0"
             VALUE "OriginalFilename", "libpq.dll\0"
             VALUE "ProductName", "PostgreSQL\0"
-            VALUE "ProductVersion", "9.6.0\0"
+            VALUE "ProductVersion", "10.0\0"
         END
     END
     BLOCK "VarFileInfo"
diff --git a/src/port/win32ver.rc b/src/port/win32ver.rc
index c21b74c0178837301557ebf5c33006854855ee40..3ce092382bf810d1b119d40c08a7b4a1db32140c 100644
--- a/src/port/win32ver.rc
+++ b/src/port/win32ver.rc
@@ -2,8 +2,8 @@
 #include "pg_config.h"
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION    9,6,0,0
- PRODUCTVERSION 9,6,0,0
+ FILEVERSION    10,0,0,0
+ PRODUCTVERSION 10,0,0,0
  FILEFLAGSMASK  0x17L
  FILEFLAGS      0x0L
  FILEOS         VOS_NT_WINDOWS32
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index f07029bce1612cd15d02495b729a94f23284a206..9cb1ad36cf31700277284fde94a641403f21bb1e 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -131,12 +131,12 @@ sub GenerateFiles
 		if (/^AC_INIT\(\[PostgreSQL\], \[([^\]]+)\]/)
 		{
 			$self->{strver} = $1;
-			if ($self->{strver} !~ /^(\d+)\.(\d+)(?:\.(\d+))?/)
+			if ($self->{strver} !~ /^(\d+)(?:\.(\d+))?/)
 			{
 				confess "Bad format of version: $self->{strver}\n";
 			}
-			$self->{numver} = sprintf("%d%02d%02d", $1, $2, $3 ? $3 : 0);
-			$self->{majorver} = sprintf("%d.%d", $1, $2);
+			$self->{numver} = sprintf("%d%04d", $1, $2 ? $2 : 0);
+			$self->{majorver} = sprintf("%d", $1);
 		}
 	}
 	close(C);
diff --git a/src/tools/version_stamp.pl b/src/tools/version_stamp.pl
index cc685453dd607c340474a92d42992c884976351d..3edd7bedaf5b2256f60f79105cd42c93ecf4eaef 100755
--- a/src/tools/version_stamp.pl
+++ b/src/tools/version_stamp.pl
@@ -22,8 +22,7 @@
 
 # Major version is hard-wired into the script.  We update it when we branch
 # a new development version.
-$major1 = 9;
-$major2 = 6;
+$majorversion = 10;
 
 # Validate argument and compute derived variables
 $minor = shift;
@@ -60,7 +59,6 @@ else
 }
 
 # Create various required forms of the version number
-$majorversion = $major1 . "." . $major2;
 if ($dotneeded)
 {
 	$fullversion = $majorversion . "." . $minor;
@@ -70,7 +68,7 @@ else
 	$fullversion = $majorversion . $minor;
 }
 $numericversion = $majorversion . "." . $numericminor;
-$padnumericversion = sprintf("%d%02d%02d", $major1, $major2, $numericminor);
+$padnumericversion = sprintf("%d%04d", $majorversion, $numericminor);
 
 # Get the autoconf version number for eventual nag message
 # (this also ensures we're in the right directory)
@@ -110,15 +108,15 @@ sed_file("src/include/pg_config.h.win32",
 );
 
 sed_file("src/interfaces/libpq/libpq.rc.in",
-"-e 's/FILEVERSION [0-9]*,[0-9]*,[0-9]*,0/FILEVERSION $major1,$major2,$numericminor,0/' "
-	  . "-e 's/PRODUCTVERSION [0-9]*,[0-9]*,[0-9]*,0/PRODUCTVERSION $major1,$major2,$numericminor,0/' "
+"-e 's/FILEVERSION [0-9]*,[0-9]*,[0-9]*,0/FILEVERSION $majorversion,0,$numericminor,0/' "
+	  . "-e 's/PRODUCTVERSION [0-9]*,[0-9]*,[0-9]*,0/PRODUCTVERSION $majorversion,0,$numericminor,0/' "
 	  . "-e 's/VALUE \"FileVersion\", \"[0-9.]*/VALUE \"FileVersion\", \"$numericversion/' "
 	  . "-e 's/VALUE \"ProductVersion\", \"[0-9.]*/VALUE \"ProductVersion\", \"$numericversion/'"
 );
 
 sed_file("src/port/win32ver.rc",
-"-e 's/FILEVERSION    [0-9]*,[0-9]*,[0-9]*,0/FILEVERSION    $major1,$major2,$numericminor,0/' "
-	  . "-e 's/PRODUCTVERSION [0-9]*,[0-9]*,[0-9]*,0/PRODUCTVERSION $major1,$major2,$numericminor,0/'"
+"-e 's/FILEVERSION    [0-9]*,[0-9]*,[0-9]*,0/FILEVERSION    $majorversion,0,$numericminor,0/' "
+	  . "-e 's/PRODUCTVERSION [0-9]*,[0-9]*,[0-9]*,0/PRODUCTVERSION $majorversion,0,$numericminor,0/'"
 );
 
 print "Stamped these files with version number $fullversion:\n$fixedfiles";