Thread: pg_dump failure in tar format.

pg_dump failure in tar format.

From
"Nick Fankhauser"
Date:
I've posted the information below twice to the admin list without getting a
solution, so I'm promoting it to a bug.

I'm not subscribed to the bug list, so please cc me on responses and I'll
try to supply information as needed.


I'm getting the following error message:

pg_dump: [tar archiver] could not write to tar member (wrote 39, attempted
166)

Here are the particulars:

-I'm running this command: "pg_dump -Ft prod > prod.dump.tar" (The database
is named prod)

-The dump gets about 1/4 of the way through, and then gives me the error
message and dies.

-I'm running PostgreSQL version 7.3.2.

-There is plenty of disk space available.

-The same command on the same database and server with same specs worked
last week when I was on V7.2.1.

-Since upgrading, more data has been added, but the structure of the
database is unchanged.

-Using the -v switch shows me that it always quits on the same table, but
otherwise adds no new information.

-The part of the error message in parentheses changes on each run. For
instance, on the last run, I got  "(wrote 64, attempted 174)" The rest of
the message remains consistent.

-The table it quits on is fairly large- about 2.6GB. It is both "wide"
because it contains a text field that is usually a few sentences of text,
and "long", containing 9,137,808 records. This is also the only table in our
database that is split into multiple files.

-A text dump using this command works fine and exports the entire database
without a problem: "pg_dump prod > prod.dump.text"

-I have set up an identical system (Same hardware, same software, same Data
in DB) to do testing on, and confirmed that I get the same error on this
system, so it appears to not be a hardware error or just a bad copy of the
software.

-Several folks suggested that I was hitting the 2GB file size limit. This is
not the case. Here is a snip from the console log on the second machine that
I'm using to diagnose with:


nickf@morgai:~$ pg_dump -Ft alpha > dump.tar
pg_dump: [tar archiver] could not write to tar member (wrote 110, attempted
398)
nickf@morgai:~$
nickf@morgai:~$
nickf@morgai:~$ ls -al dump.tar
-rw-r--r--    1 nickf    nickf    1388367872 Jul 21 14:49 dump.tar
nickf@morgai:~$


Thanks for looking this over- please let me know if anyone has any ideas
about this.

-Regards,
     -Nick

---------------------------------------------------------------------
Nick Fankhauser

    nickf@doxpop.com  Phone 1.765.965.7363  Fax 1.765.962.9788
doxpop - Court records at your fingertips - http://www.doxpop.com/

Re: pg_dump failure in tar format.

From
Philip Warner
Date:
At 02:47 PM 1/08/2003 -0500, Nick Fankhauser - Doxpop wrote:
>pg_dump: [tar archiver] could not write to tar member (wrote 39, attempted
>166)

One of the nasty features of TAR format is that it needs to know the file
size before adding it to the archive. As a result, pg_dump stores the file
in the /tmp directory before moving it to the actual output file. For huge
files, this means /tmp must be able to cope with the uncompressed size of
the largest table. It's horrible, I know, which is why I use -Fc, but I'd
guess this is the cause of your error.

It uses tmpfile() to get a temp file, so I can't see a simple way to test
this, unless you can free up 2+GB in /tmp?

Please let me know if this is the cause, and if you can not test it, I will
try to send a patch to (temporarily) avoid using tmpfile(). Ideally, I
suppose pg_dump should support the ability to override the tmpfile() location.

Bye for now,

Philip




----------------------------------------------------------------
Philip Warner                    |     __---_____
Albatross Consulting Pty. Ltd.   |----/       -  \
(A.B.N. 75 008 659 498)          |          /(@)   ______---_
Tel: (+61) 0500 83 82 81         |                 _________  \
Fax: (+61) 03 5330 3172          |                 ___________ |
Http://www.rhyme.com.au          |                /           \|
                                  |    --________--
PGP key available upon request,  |  /
and from pgp5.ai.mit.edu:11371   |/

Re: pg_dump failure in tar format.

From
"Nick Fankhauser"
Date:
Phillip-

Thanks for the explanation of how this works- I'll check it out & let you
know if that is the source of the problem in my case. If it is, perhaps I
can submit a short paragraph for the documentation that will clue people in
if they run into this in the future. I suppose it could be handled more
gracefully in the code by specifying a tempfile location as you suggest, but
since it isn't really broken, I'd vote that documenting the potential
constraint is a valid and time-saving "fix" that will let you put off
messing with the code until you have a more compelling reason to work with
it.

-NF

> -----Original Message-----
> From: Philip Warner [mailto:pjw@rhyme.com.au]
> Sent: Friday, August 01, 2003 6:37 PM
> To: nickf@ontko.com; pgsql-bugs@postgresql.org
> Subject: Re: [BUGS] pg_dump failure in tar format.
>
>
> At 02:47 PM 1/08/2003 -0500, Nick Fankhauser - Doxpop wrote:
> >pg_dump: [tar archiver] could not write to tar member (wrote 39,
> attempted
> >166)
>
> One of the nasty features of TAR format is that it needs to know the file
> size before adding it to the archive. As a result, pg_dump stores
> the file
> in the /tmp directory before moving it to the actual output file.
> For huge
> files, this means /tmp must be able to cope with the uncompressed size of
> the largest table. It's horrible, I know, which is why I use -Fc, but I'd
> guess this is the cause of your error.
>
> It uses tmpfile() to get a temp file, so I can't see a simple way to test
> this, unless you can free up 2+GB in /tmp?
>
> Please let me know if this is the cause, and if you can not test
> it, I will
> try to send a patch to (temporarily) avoid using tmpfile(). Ideally, I
> suppose pg_dump should support the ability to override the
> tmpfile() location.
>
> Bye for now,
>
> Philip
>
>
>
>
> ----------------------------------------------------------------
> Philip Warner                    |     __---_____
> Albatross Consulting Pty. Ltd.   |----/       -  \
> (A.B.N. 75 008 659 498)          |          /(@)   ______---_
> Tel: (+61) 0500 83 82 81         |                 _________  \
> Fax: (+61) 03 5330 3172          |                 ___________ |
> Http://www.rhyme.com.au          |                /           \|
>                                   |    --________--
> PGP key available upon request,  |  /
> and from pgp5.ai.mit.edu:11371   |/
>