]> granicus.if.org Git - postgresql/commitdiff
psql: complain if pg_dump custom-format is detected
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 24 Oct 2014 10:14:09 +0000 (07:14 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 24 Oct 2014 10:14:09 +0000 (07:14 -0300)
Apparently, this is a very common mistake for users to make; it is
better to have it fail reasonably rather than throw potentially a large
number of errors.  Since we have a magic string at the start of the
file, we can detect the case easily and there's no other possible useful
behavior anyway.

Author: Craig Ringer

src/bin/psql/mainloop.c

index 98211dcb2a7365bc2380d22ab36b803009c94338..7b0260970153bbfed96e8f8c9b2add5c506b0dec 100644 (file)
@@ -175,6 +175,18 @@ MainLoop(FILE *source)
                if (pset.lineno == 1 && pset.encoding == PG_UTF8 && strncmp(line, "\xef\xbb\xbf", 3) == 0)
                        memmove(line, line + 3, strlen(line + 3) + 1);
 
+               /* Detect attempts to run custom-format dumps as SQL scripts */
+               if (pset.lineno == 1 && !pset.cur_cmd_interactive &&
+                       strncmp(line, "PGDMP", 5) == 0)
+               {
+                       free(line);
+                       puts(_("The input is a PostgreSQL custom-format dump.\n"
+                                  "Use the pg_restore command-line client to restore this dump to a database.\n"));
+                       fflush(stdout);
+                       successResult = EXIT_FAILURE;
+                       break;
+               }
+
                /* nothing left on line? then ignore */
                if (line[0] == '\0' && !psql_scan_in_quote(scan_state))
                {