From 52ab02d593e9d83c7bff8b6853aba59242ce967a Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 5 Sep 2018 14:36:13 -0300 Subject: Simplify partitioned table creation vs. relcache In the original code, we were storing the pg_inherits row for a partitioned table too early: enough that we had a hack for relcache to avoid falling flat on its face while reading such a partial entry. If we finish the pg_class creation first and *then* store the pg_inherits entry, we don't need that hack. Also recognize that pg_class.relpartbound is not marked NOT NULL and therefore it's entirely possible to read null values, so having only Assert() protection isn't enough. Change those to if/elog tests instead. This qualifies as a robustness fix, so backpatch to pg11. In passing, remove one access that wasn't actually needed, and reword one message to be like all the others that check for the same thing. Reviewed-by: Amit Langote Discussion: https://postgr.es/m/20180903213916.hh6wasnrdg6xv2ud@alvherre.pgsql --- src/backend/partitioning/partbounds.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/backend/partitioning/partbounds.c') diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 9015a05d323..4ed99206181 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -1641,8 +1641,9 @@ get_qual_for_range(Relation parent, PartitionBoundSpec *spec, datum = SysCacheGetAttr(RELOID, tuple, Anum_pg_class_relpartbound, &isnull); + if (isnull) + elog(ERROR, "null relpartbound for relation %u", inhrelid); - Assert(!isnull); bspec = (PartitionBoundSpec *) stringToNode(TextDatumGetCString(datum)); if (!IsA(bspec, PartitionBoundSpec)) -- cgit v1.2.3