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))
        {