@@ -77,6 +77,9 @@ typedef struct _parallel_slot
77
77
78
78
#define NO_SLOT (-1)
79
79
80
+ #define TEXT_DUMP_HEADER "--\n-- PostgreSQL database dump\n--\n\n"
81
+ #define TEXT_DUMPALL_HEADER "--\n-- PostgreSQL database cluster dump\n--\n\n"
82
+
80
83
/* state needed to save/restore an archive's output target */
81
84
typedef struct _outputContext
82
85
{
@@ -1862,12 +1865,20 @@ _discoverArchiveFormat(ArchiveHandle *AH)
1862
1865
else
1863
1866
{
1864
1867
/*
1865
- * *Maybe* we have a tar archive format file... So, read first 512
1866
- * byte header...
1868
+ * *Maybe* we have a tar archive format file or a text dump ...
1869
+ * So, read first 512 byte header...
1867
1870
*/
1868
1871
cnt = fread (& AH -> lookahead [AH -> lookaheadLen ], 1 , 512 - AH -> lookaheadLen , fh );
1869
1872
AH -> lookaheadLen += cnt ;
1870
1873
1874
+ if (AH -> lookaheadLen >= strlen (TEXT_DUMPALL_HEADER ) &&
1875
+ (strncmp (AH -> lookahead , TEXT_DUMP_HEADER , strlen (TEXT_DUMP_HEADER )) == 0 ||
1876
+ strncmp (AH -> lookahead , TEXT_DUMPALL_HEADER , strlen (TEXT_DUMPALL_HEADER )) == 0 ))
1877
+ {
1878
+ /* looks like it's probably a text format dump. so suggest they try psql */
1879
+ die_horribly (AH , modulename , "input file appears to be a text format dump. Please use psql.\n" );
1880
+ }
1881
+
1871
1882
if (AH -> lookaheadLen != 512 )
1872
1883
die_horribly (AH , modulename , "input file does not appear to be a valid archive (too short?)\n" );
1873
1884
0 commit comments