aboutsummaryrefslogtreecommitdiff
path: root/src/include/fe_utils
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2019-10-17 09:58:01 +0200
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2019-10-17 09:58:01 +0200
commit1752e351639dcc68ea289cf91428246ed316d9b2 (patch)
treeab7b3f1c6555323057d8fa9b81529f3811e575c5 /src/include/fe_utils
parent3c8c55dd5445370c5cad3ae04de02caba7be7073 (diff)
downloadpostgresql-1752e351639dcc68ea289cf91428246ed316d9b2.tar.gz
postgresql-1752e351639dcc68ea289cf91428246ed316d9b2.zip
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 f56f8f8da6af, so backpatch to Postgres 12. Discussion: https://postgr.es/m/20191005224333.GA9738@alvherre.pgsql
Diffstat (limited to 'src/include/fe_utils')
-rw-r--r--src/include/fe_utils/simple_list.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/include/fe_utils/simple_list.h b/src/include/fe_utils/simple_list.h
index 75738becf42..103fd88c74f 100644
--- a/src/include/fe_utils/simple_list.h
+++ b/src/include/fe_utils/simple_list.h
@@ -2,9 +2,9 @@
*
* Simple list facilities for frontend code
*
- * Data structures for simple lists of OIDs and strings. The support for
- * these is very primitive compared to the backend's List facilities, but
- * it's all we need in, eg, pg_dump.
+ * Data structures for simple lists of OIDs, strings, and pointers. The
+ * support for these is very primitive compared to the backend's List
+ * facilities, but it's all we need in, eg, pg_dump.
*
*
* Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
@@ -43,6 +43,17 @@ typedef struct SimpleStringList
SimpleStringListCell *tail;
} SimpleStringList;
+typedef struct SimplePtrListCell
+{
+ struct SimplePtrListCell *next;
+ void *ptr;
+} SimplePtrListCell;
+
+typedef struct SimplePtrList
+{
+ SimplePtrListCell *head;
+ SimplePtrListCell *tail;
+} SimplePtrList;
extern void simple_oid_list_append(SimpleOidList *list, Oid val);
extern bool simple_oid_list_member(SimpleOidList *list, Oid val);
@@ -54,4 +65,6 @@ extern void simple_string_list_destroy(SimpleStringList *list);
extern const char *simple_string_list_not_touched(SimpleStringList *list);
+extern void simple_ptr_list_append(SimplePtrList *list, void *val);
+
#endif /* SIMPLE_LIST_H */