Prevent pg_basebackup when integer_datetimes flag doesn't match.
authorRobert Haas <rhaas@postgresql.org>
Tue, 22 May 2012 14:02:47 +0000 (10:02 -0400)
committerRobert Haas <rhaas@postgresql.org>
Tue, 22 May 2012 14:02:47 +0000 (10:02 -0400)
Magnus Hagander, reviewed by Fujii Masao, with slight wording changes
by me.

src/bin/pg_basebackup/streamutil.c

index b12932fe3f8313a4af8500f386785bacc36db3ea..0de6f54e415283031e14e6fdac210aa4be66239a 100644 (file)
@@ -75,6 +75,7 @@ GetConnection(void)
        const char **keywords;
        const char **values;
        char       *password = NULL;
+       const char *tmpparam;
 
        if (dbhost)
                argcount++;
@@ -157,6 +158,29 @@ GetConnection(void)
                free(values);
                free(keywords);
 
+               /*
+                * Ensure we have the same value of integer timestamps as the
+                * server we are connecting to.
+                */
+               tmpparam = PQparameterStatus(tmpconn, "integer_datetimes");
+               if (!tmpparam)
+               {
+                       fprintf(stderr, _("%s: could not determine server setting for integer_datetimes\n"),
+                                       progname);
+                       exit(1);
+               }
+
+#ifdef HAVE_INT64_TIMESTAMP
+               if (strcmp(tmpparam, "on") != 0)
+#else
+               if (strcmp(tmpparam, "off") != 0)
+#endif
+               {
+                       fprintf(stderr, _("%s: integer_datetimes compile flag does not match server\n"),
+                                       progname);
+                       exit(1);
+               }
+
                /* Store the password for next run */
                if (password)
                        dbpassword = password;