else
        check_ok();
 }
+
+
+/*
+ * report_extension_updates()
+ * Report extensions that should be updated.
+ */
+void
+report_extension_updates(ClusterInfo *cluster)
+{
+   int         dbnum;
+   FILE       *script = NULL;
+   bool        found = false;
+   char       *output_path = "update_extensions.sql";
+
+   prep_status("Checking for extension updates");
+
+   for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
+   {
+       PGresult   *res;
+       bool        db_used = false;
+       int         ntups;
+       int         rowno;
+       int         i_name;
+       DbInfo     *active_db = &cluster->dbarr.dbs[dbnum];
+       PGconn     *conn = connectToServer(cluster, active_db->db_name);
+
+       /* find hash indexes */
+       res = executeQueryOrDie(conn,
+                               "SELECT name "
+                               "FROM pg_available_extensions "
+                               "WHERE installed_version != default_version"
+           );
+
+       ntups = PQntuples(res);
+       i_name = PQfnumber(res, "name");
+       for (rowno = 0; rowno < ntups; rowno++)
+       {
+           found = true;
+
+           if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL)
+               pg_fatal("could not open file \"%s\": %s\n", output_path,
+                        strerror(errno));
+           if (!db_used)
+           {
+               PQExpBufferData connectbuf;
+
+               initPQExpBuffer(&connectbuf);
+               appendPsqlMetaConnect(&connectbuf, active_db->db_name);
+               fputs(connectbuf.data, script);
+               termPQExpBuffer(&connectbuf);
+               db_used = true;
+           }
+           fprintf(script, "ALTER EXTENSION %s UPDATE;\n",
+                   quote_identifier(PQgetvalue(res, rowno, i_name)));
+       }
+
+       PQclear(res);
+
+       PQfinish(conn);
+   }
+
+   if (script)
+       fclose(script);
+
+   if (found)
+   {
+       report_status(PG_REPORT, "notice");
+       pg_log(PG_REPORT, "\n"
+              "Your installation contains extensions that should be updated\n"
+              "with the ALTER EXTENSION command.  The file\n"
+              "    %s\n"
+              "when executed by psql by the database superuser will update\n"
+              "these extensions.\n\n",
+              output_path);
+   }
+   else
+       check_ok();
+}