mirror of
https://github.com/postgres/postgres.git
synced 2026-02-27 11:50:33 -05:00
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
68 lines
1.8 KiB
C
68 lines
1.8 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* Simple list facilities for frontend code
|
|
*
|
|
* 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
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/fe_utils/simple_list.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef SIMPLE_LIST_H
|
|
#define SIMPLE_LIST_H
|
|
|
|
typedef struct SimpleOidListCell
|
|
{
|
|
struct SimpleOidListCell *next;
|
|
Oid val;
|
|
} SimpleOidListCell;
|
|
|
|
typedef struct SimpleOidList
|
|
{
|
|
SimpleOidListCell *head;
|
|
SimpleOidListCell *tail;
|
|
} SimpleOidList;
|
|
|
|
typedef struct SimpleStringListCell
|
|
{
|
|
struct SimpleStringListCell *next;
|
|
bool touched; /* true, when this string was searched and
|
|
* touched */
|
|
char val[FLEXIBLE_ARRAY_MEMBER]; /* null-terminated string here */
|
|
} SimpleStringListCell;
|
|
|
|
typedef struct SimpleStringList
|
|
{
|
|
SimpleStringListCell *head;
|
|
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);
|
|
|
|
extern void simple_string_list_append(SimpleStringList *list, const char *val);
|
|
extern bool simple_string_list_member(SimpleStringList *list, const char *val);
|
|
|
|
extern const char *simple_string_list_not_touched(SimpleStringList *list);
|
|
|
|
extern void simple_ptr_list_append(SimplePtrList *list, void *val);
|
|
|
|
#endif /* SIMPLE_LIST_H */
|