Re: BUG #2727: pg_restore error on BLOB COMMENTS - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #2727: pg_restore error on BLOB COMMENTS
Date
Msg-id 9919.1162336717@sss.pgh.pa.us
Whole thread Raw
In response to BUG #2727: pg_restore error on BLOB COMMENTS  ("Konstantin Pelepelin" <cat@dtf.ru>)
List pgsql-bugs
"Konstantin Pelepelin" <cat@dtf.ru> writes:
> pg_restore: restoring large object OID 70380132
> pg_restore: restored 5116 large objects
> pg_restore: restoring BLOB COMMENTS
> pg_restore: [tar archiver] could not find header for file 2004.dat in tar
> archive
> pg_restore: *** aborted because of error

Hmm ... it looks like blob comments never have worked in tar format,
or not recently anyway.  _LoadBlobs() runs off the end of the archive
file and then there's no mechanism for backing up --- not that that
would work anyway if reading from a pipe.  I'm thinking of fixing it
like this (against HEAD, but the code hasn't changed much lately):


*** src/bin/pg_dump/pg_backup_tar.c.orig    Tue Oct  3 23:16:46 2006
--- src/bin/pg_dump/pg_backup_tar.c    Tue Oct 31 17:27:54 2006
***************
*** 701,706 ****
--- 701,707 ----
      lclContext *ctx = (lclContext *) AH->formatData;
      TAR_MEMBER *th;
      size_t        cnt;
+     bool        foundBlob = false;
      char        buf[4096];

      StartRestoreBlobs(AH);
***************
*** 725,734 ****
                      ahwrite(buf, 1, cnt, AH);
                  }
                  EndRestoreBlob(AH, oid);
              }
          }
-
-         tarClose(AH, th);

          th = tarOpen(AH, NULL, 'r');
      }
--- 726,745 ----
                      ahwrite(buf, 1, cnt, AH);
                  }
                  EndRestoreBlob(AH, oid);
+                 foundBlob = true;
              }
+             tarClose(AH, th);
+         }
+         else
+         {
+             tarClose(AH, th);
+             /*
+              * Once we have found the first blob, stop at the first
+              * non-blob entry (which will be 'blobs.toc').
+              */
+             if (foundBlob)
+                 break;
          }

          th = tarOpen(AH, NULL, 'r');
      }

Thanks for the report!

            regards, tom lane

pgsql-bugs by date:

Previous
From: Jeff Davis
Date:
Subject: Re: COPY fails on 8.1 with invalid byte sequences in text
Next
From: Tom Lane
Date:
Subject: Re: COPY fails on 8.1 with invalid byte sequences in text