Обсуждение: Fix a failure of pg_dump with !HAVE_LIBZ
Hello. I got the following messages during investigating some other bug, from pg_dump compiled with --without-zlib. > $ rm -rf testdump; pg_dump "postgres://horiguti:hoge@localhost/postgres" --jobs=9 -Fd -f testdump; echo $? > pg_dump: [archiver] WARNING: requested compression not available in this installation -- archive will be uncompressed > pg_dump: [parallel archiver] not built with zlib support > pg_dump: [archiver (db)] query failed: ERROR: could not import the requested snapshot > DETAIL: The source transaction 10116 is not running anymore. > pg_dump: [archiver (db)] query failed: ERROR: invalid snapshot identifier: "00002784-1" > pg_dump: [archiver (db)] query failed: ERROR: invalid snapshot identifier: "00002784-1" > 1 The warning says that it makes uncompressed archive but it really doesn't since workers die unexpectedly from the succeeding errors. This is because that compressLevel is corrected in ReadHead(), where too late for it to be propagated to workers. One reasonable place would be where the default value of compressLevel is set in main(). (The following errors mentioning snapshot id are the consequences of unexpected sudden death of the first worker from this bug, which causes expiration of the snapshot.) It works correctly with the patch attached, both on Linux and on Windows. > $ rm -rf testdump; pg_dump "postgres://horiguti:hoge@localhost/postgres" --jobs=9 -Fd -f testdump; echo $? > pg_dump: WARNING: requested compression (-1) not available in this installation -- archive will be uncompressed > 0 regards, -- Kyotaro Horiguchi NTT Open Source Software Center
Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> writes: > The warning says that it makes uncompressed archive but it really > doesn't since workers die unexpectedly from the succeeding > errors. This is because that compressLevel is corrected in > ReadHead(), where too late for it to be propagated to workers. > One reasonable place would be where the default value of > compressLevel is set in main(). Yeah, agreed. I also noticed that you get the WARNING even when you did not ask for compression, which seems rather unhelpful and annoying. So I suppressed it by making the default be 0 not Z_DEFAULT_COMPRESSION when we don't HAVE_LIBZ. regards, tom lane
At Thu, 26 May 2016 11:54:35 -0400, Tom Lane <tgl@sss.pgh.pa.us> wrote in <7601.1464278075@sss.pgh.pa.us> > Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> writes: > > The warning says that it makes uncompressed archive but it really > > doesn't since workers die unexpectedly from the succeeding > > errors. This is because that compressLevel is corrected in > > ReadHead(), where too late for it to be propagated to workers. > > One reasonable place would be where the default value of > > compressLevel is set in main(). > > Yeah, agreed. I also noticed that you get the WARNING even when you > did not ask for compression, which seems rather unhelpful and annoying. > So I suppressed it by making the default be 0 not Z_DEFAULT_COMPRESSION > when we don't HAVE_LIBZ. Yeah, that's what I thought but didn't. Thanks for adding it and committing this. regards, -- Kyotaro Horiguchi NTT Open Source Software Center