Hi all,

I'm facing a 'segmentation fault' error using '--use-list' and '--jobs'
options after update to 9.5.8.

We generate a list ignoring some 'TABLE DATA' toc for a selective restore.

See the test case below:

cat <<EOF | psql
\c postgres
drop database if exists test_restore;
create database test_restore;
\c test_restore

create table t1 (id serial primary key);
create table t2 (id serial primary key);
create table t3 (id serial primary key);
create table t4 (id serial primary key);
create table t5 (id serial primary key);

insert into t1 select * from generate_series(1,100);
insert into t2 select * from generate_series(1,100);
insert into t3 select * from generate_series(1,100);
insert into t4 select * from generate_series(1,100);
insert into t5 select * from generate_series(1,100);
EOF

-- generate complete dump file
pg_dump -Fc -v -f /tmp/test_restore.dump test_restore

-- generate a parcial list for selective restore ignoring some "TABLE DATA"
toc
pg_restore --list /tmp/test_restore.dump | grep -v -E 'TABLE DATA public
t(2|4)' > /tmp/test_restore.dump.list

-- rebuild database
cat <<EOF | psql
\c postgres
drop database if exists test_restore;
create database test_restore;
\c test_restore
EOF

-- try restore
pg_restore --jobs=2 --use-list=/tmp/test_restore.dump.list --format=custom
--dbname=test_restore --verbose /tmp/test_restore.dump


After execute pg_restore we got the following back trace (against master
branch):

#0  0x000000000041319b in par_list_append (l=0x0, te=0x9acf10) at
pg_backup_archiver.c:4129
#1  0x0000000000414539 in reduce_dependencies (AH=0x9a4480, te=0x9aa540,
ready_list=0x0) at pg_backup_archiver.c:4576
#2  0x00000000004128ec in restore_toc_entries_prefork (AH=0x9a4480,
pending_list=0x7ffffc0e3430) at pg_backup_archiver.c:3903
#3  0x0000000000406830 in RestoreArchive (AHX=0x9a4480) at
pg_backup_archiver.c:645
#4  0x0000000000404b82 in main (argc=7, argv=0x7ffffc0e3bb8) at
pg_restore.c:429


I've tested against REL9_5_STABLE and master and got the same error. Seems
the commit 65048cf23dbabf428897b5a74ad730e478dca5f3 added this regression.

In restore_toc_entries_prefork have a comment to don't touch 'read_list' so
pass NULL... but the reduce_dependencies doesn't check it. I'm really don't
know if it's correct but attached patch fix this issue.

Regards,

-- 
   Fabrízio de Royes Mello         Timbira - http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 4cfb71c..d02f692 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -4568,7 +4568,8 @@ reduce_dependencies(ArchiveHandle *AH, TocEntry *te, TocEntry *ready_list)
 		 */
 		if (otherte->depCount == 0 &&
 			_tocEntryRestorePass(otherte) == AH->restorePass &&
-			otherte->par_prev != NULL)
+			otherte->par_prev != NULL &&
+			ready_list != NULL)
 		{
 			/* It must be in the pending list, so remove it ... */
 			par_list_remove(otherte);
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to