1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Fix parallel restore of FKs to partitioned tables

When an FK constraint is created, it needs the index on the referenced
table to exist and be valid.  When doing parallel pg_restore and the
referenced table was partitioned, this condition can sometimes not be
met, because pg_dump didn't emit sufficient object dependencies to
ensure so; this means that parallel pg_restore would fail in certain
conditions.  Fix by having pg_dump make the FK constraint object
dependent on the partition attachment objects for the constraint's
referenced index.

This has been broken since f56f8f8da6, so backpatch to Postgres 12.

Discussion: https://postgr.es/m/20191005224333.GA9738@alvherre.pgsql
This commit is contained in:
Alvaro Herrera
2019-10-17 09:58:01 +02:00
parent 3c8c55dd54
commit 1752e35163
5 changed files with 82 additions and 5 deletions

View File

@ -152,3 +152,24 @@ simple_string_list_not_touched(SimpleStringList *list)
}
return NULL;
}
/*
* Append a pointer to the list.
*
* Caller must ensure that the pointer remains valid.
*/
void
simple_ptr_list_append(SimplePtrList *list, void *ptr)
{
SimplePtrListCell *cell;
cell = (SimplePtrListCell *) pg_malloc(sizeof(SimplePtrListCell));
cell->next = NULL;
cell->ptr = ptr;
if (list->tail)
list->tail->next = cell;
else
list->head = cell;
list->tail = cell;
}