[HACKERS] Segmentation Fault during pg_restore using '--use-list' and '--jobs' - Mailing list pgsql-hackers

From Fabrízio de Royes Mello
Subject [HACKERS] Segmentation Fault during pg_restore using '--use-list' and '--jobs'
Date
Msg-id CAFcNs+pjuv0JL_x4+=71TPUPjdLHOXA4YfT32myj_OrrZb4ohA@mail.gmail.com
Whole thread Raw
Responses Re: [HACKERS] Segmentation Fault during pg_restore using '--use-list' and '--jobs'  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
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
Attachment

pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: [HACKERS] Hash Functions
Next
From: Robert Haas
Date:
Subject: Re: [HACKERS] Update low-level backup documentation to match actual behavior