diff --git a/configure b/configure
index 6a8db7ce2c84ba280b5fb3a21acf046ee3d97fa0..bbbe81170acae429c3b86847125e555813c25f8f 100755
--- a/configure
+++ b/configure
@@ -1473,7 +1473,7 @@ Optional Features:
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --disable-integer-datetimes
-                          disable 64-bit integer date/time support
+                          obsolete option, no longer supported
   --enable-nls[=LANGUAGES]
                           enable Native Language Support
   --disable-rpath         do not embed shared library search path in
@@ -2984,10 +2984,10 @@ fi
 
 
 #
-# 64-bit integer date/time storage: enabled by default.
+# 64-bit integer date/time storage is now the only option, but to avoid
+# unnecessary breakage of build scripts, continue to accept an explicit
+# "--enable-integer-datetimes" switch.
 #
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with 64-bit integer date/time support" >&5
-$as_echo_n "checking whether to build with 64-bit integer date/time support... " >&6; }
 
 
 # Check whether --enable-integer-datetimes was given.
@@ -2995,12 +2995,10 @@ if test "${enable_integer_datetimes+set}" = set; then :
   enableval=$enable_integer_datetimes;
   case $enableval in
     yes)
-
-$as_echo "#define USE_INTEGER_DATETIMES 1" >>confdefs.h
-
+      :
       ;;
     no)
-      :
+      as_fn_error $? "--disable-integer-datetimes is no longer supported" "$LINENO" 5
       ;;
     *)
       as_fn_error $? "no argument expected for --enable-integer-datetimes option" "$LINENO" 5
@@ -3010,13 +3008,9 @@ $as_echo "#define USE_INTEGER_DATETIMES 1" >>confdefs.h
 else
   enable_integer_datetimes=yes
 
-$as_echo "#define USE_INTEGER_DATETIMES 1" >>confdefs.h
-
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_integer_datetimes" >&5
-$as_echo "$enable_integer_datetimes" >&6; }
 
 
 #
diff --git a/configure.in b/configure.in
index 01b618c931ddd44e7d40460d86377ef0e27fb394..dab8ab3b328ba9fe749a241cb70421dd7b68fc64 100644
--- a/configure.in
+++ b/configure.in
@@ -122,13 +122,13 @@ PGAC_ARG_REQ(with, libs,      [DIRS], [alternative spelling of --with-libraries]
 
 
 #
-# 64-bit integer date/time storage: enabled by default.
+# 64-bit integer date/time storage is now the only option, but to avoid
+# unnecessary breakage of build scripts, continue to accept an explicit
+# "--enable-integer-datetimes" switch.
 #
-AC_MSG_CHECKING([whether to build with 64-bit integer date/time support])
-PGAC_ARG_BOOL(enable, integer-datetimes, yes, [disable 64-bit integer date/time support],
-              [AC_DEFINE([USE_INTEGER_DATETIMES], 1,
-                         [Define to 1 if you want 64-bit integer timestamp and interval support. (--enable-integer-datetimes)])])
-AC_MSG_RESULT([$enable_integer_datetimes])
+PGAC_ARG_BOOL(enable, integer-datetimes, yes, [obsolete option, no longer supported],
+              [],
+              [AC_MSG_ERROR([--disable-integer-datetimes is no longer supported])])
 
 
 #
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 95afc2c483d5e16caaf7665267815f3976aa9e8b..1b390a257ae793410f79920f07ad986b3625f17f 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -7695,11 +7695,9 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
       </term>
       <listitem>
        <para>
-        Reports whether <productname>PostgreSQL</> was built with
-        support for 64-bit-integer dates and times.  This can be
-        disabled by configuring with <literal>--disable-integer-datetimes</>
-        when building <productname>PostgreSQL</>.  The default value is
-        <literal>on</literal>.
+        Reports whether <productname>PostgreSQL</> was built with support for
+        64-bit-integer dates and times.  As of <productname>PostgreSQL</> 10,
+        this is always <literal>on</literal>.
        </para>
       </listitem>
      </varlistentry>
diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml
index 387ba53ef091cd8c0e32b14c8350fba3045f92c0..35610307d9a4b0c4ba98971555620b9f67e57a7e 100644
--- a/doc/src/sgml/datatype.sgml
+++ b/doc/src/sgml/datatype.sgml
@@ -1580,7 +1580,7 @@ SELECT E'\\xDEADBEEF';
         <entry>both date and time (no time zone)</entry>
         <entry>4713 BC</entry>
         <entry>294276 AD</entry>
-        <entry>1 microsecond / 14 digits</entry>
+        <entry>1 microsecond</entry>
        </row>
        <row>
         <entry><type>timestamp [ (<replaceable>p</replaceable>) ] with time zone</type></entry>
@@ -1588,7 +1588,7 @@ SELECT E'\\xDEADBEEF';
         <entry>both date and time, with time zone</entry>
         <entry>4713 BC</entry>
         <entry>294276 AD</entry>
-        <entry>1 microsecond / 14 digits</entry>
+        <entry>1 microsecond</entry>
        </row>
        <row>
         <entry><type>date</type></entry>
@@ -1604,15 +1604,15 @@ SELECT E'\\xDEADBEEF';
         <entry>time of day (no date)</entry>
         <entry>00:00:00</entry>
         <entry>24:00:00</entry>
-        <entry>1 microsecond / 14 digits</entry>
+        <entry>1 microsecond</entry>
        </row>
        <row>
         <entry><type>time [ (<replaceable>p</replaceable>) ] with time zone</type></entry>
         <entry>12 bytes</entry>
-        <entry>times of day only, with time zone</entry>
+        <entry>time of day (no date), with time zone</entry>
         <entry>00:00:00+1459</entry>
         <entry>24:00:00-1459</entry>
-        <entry>1 microsecond / 14 digits</entry>
+        <entry>1 microsecond</entry>
        </row>
        <row>
         <entry><type>interval [ <replaceable>fields</replaceable> ] [ (<replaceable>p</replaceable>) ]</type></entry>
@@ -1620,7 +1620,7 @@ SELECT E'\\xDEADBEEF';
         <entry>time interval</entry>
         <entry>-178000000 years</entry>
         <entry>178000000 years</entry>
-        <entry>1 microsecond / 14 digits</entry>
+        <entry>1 microsecond</entry>
        </row>
       </tbody>
      </tgroup>
@@ -1643,41 +1643,7 @@ SELECT E'\\xDEADBEEF';
     <replaceable>p</replaceable> which specifies the number of
     fractional digits retained in the seconds field. By default, there
     is no explicit bound on precision.  The allowed range of
-    <replaceable>p</replaceable> is from 0 to 6 for the
-    <type>timestamp</type> and <type>interval</type> types.
-   </para>
-
-   <note>
-   <para>
-    When <type>timestamp</> values are stored as eight-byte integers
-    (currently the default), microsecond precision is available over
-    the full range of values.  In this case, the internal representation
-    is the number of microseconds before or after midnight 2000-01-01.
-    When <type>timestamp</> values are stored as double precision
-    floating-point numbers (a deprecated compile-time option), the
-    internal representation is the number of seconds before or after
-    midnight 2000-01-01.  With this representation, the effective limit
-    of precision might be less than 6; in practice,
-    microsecond precision is achieved for dates within a few
-    years of 2000-01-01, but the precision degrades for dates further
-    away. Note that using floating-point datetimes allows a larger
-    range of <type>timestamp</type> values to be represented than
-    shown above: from 4713 BC up to 5874897 AD.
-   </para>
-
-   <para>
-    The same compile-time option also determines whether
-    <type>time</type> and <type>interval</type> values are stored as
-    floating-point numbers or eight-byte integers.  In the
-    floating-point case, large <type>interval</type> values degrade in
-    precision as the size of the interval increases.
-   </para>
-   </note>
-
-   <para>
-    For the <type>time</type> types, the allowed range of
-    <replaceable>p</replaceable> is from 0 to 6 when eight-byte integer
-    storage is used, or from 0 to 10 when floating-point storage is used.
+    <replaceable>p</replaceable> is from 0 to 6.
    </para>
 
    <para>
@@ -1760,9 +1726,10 @@ MINUTE TO SECOND
      specification giving the number of
      fractional digits in the seconds field. Precision can be
      specified for <type>time</type>, <type>timestamp</type>, and
-     <type>interval</type> types.  The allowed values are mentioned
-     above.  If no precision is specified in a constant specification,
-     it defaults to the precision of the literal value.
+     <type>interval</type> types, and can range from 0 to 6.
+     If no precision is specified in a constant specification,
+     it defaults to the precision of the literal value (but not
+     more than 6 digits).
     </para>
 
     <sect3>
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index be0931326bc773da681655f9c2ae87fb601e19aa..568995c9f2f160ec623bc85dfe64d6e9c60f19f0 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -955,28 +955,6 @@ su - postgres
        </listitem>
       </varlistentry>
 
-      <varlistentry>
-       <term><option>--disable-integer-datetimes</option></term>
-       <listitem>
-        <para>
-         Disable support for 64-bit integer storage for timestamps and
-         intervals, and store datetime values as floating-point
-         numbers instead. Floating-point datetime storage was the
-         default in <productname>PostgreSQL</productname> releases
-         prior to 8.4, but it is now deprecated, because it does not
-         support microsecond precision for the full range of
-         <type>timestamp</type> values. However, integer-based
-         datetime storage requires a 64-bit integer type. Therefore,
-         this option can be used when no such type is available, or
-         for compatibility with applications written for prior
-         versions of <productname>PostgreSQL</productname>. See
-         <![%standalone-include[the documentation about datetime datatypes]]>
-         <![%standalone-ignore[<xref linkend="datatype-datetime">]]>
-         for more information.
-        </para>
-       </listitem>
-      </varlistentry>
-
       <varlistentry>
        <term><option>--disable-float4-byval</option></term>
        <listitem>
diff --git a/src/include/c.h b/src/include/c.h
index 91e5baa969229116b706c33530986b63943cf9a4..947bd980672230fb48600edc98932d8720a249b3 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -340,10 +340,11 @@ typedef unsigned PG_INT128_TYPE uint128;
 #define PG_INT64_MAX	INT64CONST(0x7FFFFFFFFFFFFFFF)
 #define PG_UINT64_MAX	UINT64CONST(0xFFFFFFFFFFFFFFFF)
 
-/* Select timestamp representation (float8 or int64) */
-#ifdef USE_INTEGER_DATETIMES
+/*
+ * We now always use int64 timestamps, but keep this symbol defined for the
+ * benefit of external code that might test it.
+ */
 #define HAVE_INT64_TIMESTAMP
-#endif
 
 /*
  * Size
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index b9dfdd41c1a3f3e74f0e919f4bfd4d829817d287..8dd73f1d91576ff90aea3db49b689b52a3ab794c 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -831,10 +831,6 @@
    (--enable-float8-byval) */
 #undef USE_FLOAT8_BYVAL
 
-/* Define to 1 if you want 64-bit integer timestamp and interval support.
-   (--enable-integer-datetimes) */
-#undef USE_INTEGER_DATETIMES
-
 /* Define to 1 to build with LDAP support. (--with-ldap) */
 #undef USE_LDAP
 
diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32
index 199668c18764025dd78d222469327f0269839531..fd1af59839d43939911d3c1423f40cb94347f080 100644
--- a/src/include/pg_config.h.win32
+++ b/src/include/pg_config.h.win32
@@ -625,10 +625,6 @@
 /* Define to use /dev/urandom for random number generation */
 /* #undef USE_DEV_URANDOM */
 
-/* Define to 1 if you want 64-bit integer timestamp and interval support.
-   (--enable-integer-datetimes) */
-/* #undef USE_INTEGER_DATETIMES */
-
 /* Define to 1 to build with LDAP support. (--with-ldap) */
 /* #undef USE_LDAP */
 
diff --git a/src/interfaces/ecpg/include/ecpg_config.h.in b/src/interfaces/ecpg/include/ecpg_config.h.in
index bf99a5e7930cefa10bb0d2536ca246f5fbf24e74..736fb08dba3c162a70e8473fb1df9892be40af5e 100644
--- a/src/interfaces/ecpg/include/ecpg_config.h.in
+++ b/src/interfaces/ecpg/include/ecpg_config.h.in
@@ -10,10 +10,6 @@
 /* Define to 1 if `long long int' works and is 64 bits. */
 #undef HAVE_LONG_LONG_INT_64
 
-/* Define to 1 if you want 64-bit integer timestamp and interval support.
-   (--enable-integer-datetimes) */
-#undef USE_INTEGER_DATETIMES
-
 /* Define to 1 to build client libraries as thread-safe code.
  *    (--enable-thread-safety) */
 #undef ENABLE_THREAD_SAFETY
diff --git a/src/interfaces/ecpg/include/pgtypes_interval.h b/src/interfaces/ecpg/include/pgtypes_interval.h
index deac6a2e01a1415a42f85c2c265f3c08608f9734..5118ec784d101643cc0c17364dc9fafc2dd18597 100644
--- a/src/interfaces/ecpg/include/pgtypes_interval.h
+++ b/src/interfaces/ecpg/include/pgtypes_interval.h
@@ -20,9 +20,7 @@ typedef long long int int64;
 #error must have a working 64-bit integer datatype
 #endif
 
-#ifdef USE_INTEGER_DATETIMES
 #define HAVE_INT64_TIMESTAMP
-#endif
 #endif   /* C_H */
 
 typedef struct
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c
index 4277c2615dac7015e91f2b9cf22acc6f263e954a..b6e77562b2434f9226b744c27dbdd646c7d61ecf 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c
@@ -145,10 +145,8 @@ main(void)
 				sprintf(t, "%s %s", dates[i], times[j]);
 				ts1 = PGTYPEStimestamp_from_asc(t, NULL);
 				text = PGTYPEStimestamp_to_asc(ts1);
-				/* skip outputs sensitive to USE_INTEGER_DATETIMES */
-				if (i != 19 || (j != 3 && j != 4))
-					printf("TS[%d,%d]: %s\n",
-						i, j, errno ? "-" : text);
+				printf("TS[%d,%d]: %s\n",
+				       i, j, errno ? "-" : text);
 				free(text);
 				free(t);
 			}
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout
index 941bffbd8158867d40f4ecece7aa6bc7053517b8..0fbcce67b6895941c92da81ff37d58b74195d95f 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout
@@ -103,6 +103,8 @@ Date[19]: 0099-01-08 BC (N - F)
 TS[19,0]: 0099-01-08 00:04:00 BC
 TS[19,1]: 0099-01-08 01:59:00 BC
 TS[19,2]: 0099-01-08 13:24:40 BC
+TS[19,3]: 0099-01-08 13:24:40.495 BC
+TS[19,4]: 0099-01-08 13:24:40.123456 BC
 Date[20]: - (N - T)
 Date[21]: - (N - T)
 interval[0]: @ 1 min
diff --git a/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc b/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc
index 0bd1fec109db9ef6b5323b6ae8ea509d862764df..d519305e1881224db039dc0c6e4098bdc6dd82ce 100644
--- a/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc
+++ b/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc
@@ -110,10 +110,8 @@ main(void)
 				sprintf(t, "%s %s", dates[i], times[j]);
 				ts1 = PGTYPEStimestamp_from_asc(t, NULL);
 				text = PGTYPEStimestamp_to_asc(ts1);
-				/* skip outputs sensitive to USE_INTEGER_DATETIMES */
-				if (i != 19 || (j != 3 && j != 4))
-					printf("TS[%d,%d]: %s\n",
-						i, j, errno ? "-" : text);
+				printf("TS[%d,%d]: %s\n",
+				       i, j, errno ? "-" : text);
 				free(text);
 				free(t);
 			}
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index fbf4da3d68fa085595a8e4fca4ada4e60e30e3a2..ff9064f923d040853449bbca5b3698647918381c 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -28,9 +28,6 @@ sub _new
 	$self->DeterminePlatform();
 	my $bits = $self->{platform} eq 'Win32' ? 32 : 64;
 
-	# integer_datetimes is now the default
-	$options->{integer_datetimes} = 1
-	  unless exists $options->{integer_datetimes};
 	$options->{float4byval} = 1
 	  unless exists $options->{float4byval};
 	$options->{float8byval} = ($bits == 64)
@@ -169,8 +166,6 @@ s{PG_VERSION_STR "[^"]+"}{__STRINGIFY(x) #x\n#define __STRINGIFY2(z) __STRINGIFY
 		print O "#ifndef IGNORE_CONFIGURED_SETTINGS\n";
 		print O "#define USE_ASSERT_CHECKING 1\n"
 		  if ($self->{options}->{asserts});
-		print O "#define USE_INTEGER_DATETIMES 1\n"
-		  if ($self->{options}->{integer_datetimes});
 		print O "#define USE_LDAP 1\n"    if ($self->{options}->{ldap});
 		print O "#define HAVE_LIBZ 1\n"   if ($self->{options}->{zlib});
 		print O "#define USE_OPENSSL 1\n" if ($self->{options}->{openssl});
@@ -427,8 +422,6 @@ s{PG_VERSION_STR "[^"]+"}{__STRINGIFY(x) #x\n#define __STRINGIFY2(z) __STRINGIFY
 #define HAVE_LONG_LONG_INT_64
 #define ENABLE_THREAD_SAFETY 1
 EOF
-		print O "#define USE_INTEGER_DATETIMES 1\n"
-		  if ($self->{options}->{integer_datetimes});
 		print O "#endif\n";
 		close(O);
 	}
@@ -661,8 +654,6 @@ sub GetFakeConfigure
 
 	my $cfg = '--enable-thread-safety';
 	$cfg .= ' --enable-cassert' if ($self->{options}->{asserts});
-	$cfg .= ' --enable-integer-datetimes'
-	  if ($self->{options}->{integer_datetimes});
 	$cfg .= ' --enable-nls'       if ($self->{options}->{nls});
 	$cfg .= ' --enable-tap-tests' if ($self->{options}->{tap_tests});
 	$cfg .= ' --with-ldap'        if ($self->{options}->{ldap});
diff --git a/src/tools/msvc/config_default.pl b/src/tools/msvc/config_default.pl
index f046687bd0695207cb92f8ddbe06ccaa34bc7674..97f1af8b49ef3b03df1933023f0eaef59756fd67 100644
--- a/src/tools/msvc/config_default.pl
+++ b/src/tools/msvc/config_default.pl
@@ -4,7 +4,6 @@ use warnings;
 
 our $config = {
 	asserts => 0,    # --enable-cassert
-	  # integer_datetimes=>1,   # --enable-integer-datetimes - on is now default
 	  # float4byval=>1,         # --disable-float4-byval, on by default
 
 	# float8byval=> $platformbits == 64, # --disable-float8-byval,