diff --git a/changelog.d/9766.feature b/changelog.d/9766.feature
new file mode 100644
index 0000000000000000000000000000000000000000..030bdb456199555ef4216f91dab3b6804ab8ce24
--- /dev/null
+++ b/changelog.d/9766.feature
@@ -0,0 +1 @@
+Synapse now requires Python 3.6 or later and Postgres 9.6 or later.
diff --git a/setup.py b/setup.py
index 29e9971dc1d83ccd4ef4cd300bbb34fadb0504ac..4e9e333c6089b55d063f5dac93a98b274e9a567e 100755
--- a/setup.py
+++ b/setup.py
@@ -123,7 +123,7 @@ setup(
     zip_safe=False,
     long_description=long_description,
     long_description_content_type="text/x-rst",
-    python_requires="~=3.5",
+    python_requires="~=3.6",
     classifiers=[
         "Development Status :: 5 - Production/Stable",
         "Topic :: Communications :: Chat",
diff --git a/synapse/storage/engines/postgres.py b/synapse/storage/engines/postgres.py
index 80a3558aec3e035099133b15a82c08728d6a3ea7..d95f88b3e98b218b82209c79ccfcdfeb5e994860 100644
--- a/synapse/storage/engines/postgres.py
+++ b/synapse/storage/engines/postgres.py
@@ -47,8 +47,8 @@ class PostgresEngine(BaseDatabaseEngine):
         self._version = db_conn.server_version
 
         # Are we on a supported PostgreSQL version?
-        if not allow_outdated_version and self._version < 90500:
-            raise RuntimeError("Synapse requires PostgreSQL 9.5+ or above.")
+        if not allow_outdated_version and self._version < 90600:
+            raise RuntimeError("Synapse requires PostgreSQL 9.6 or above.")
 
         with db_conn.cursor() as txn:
             txn.execute("SHOW SERVER_ENCODING")