On Wed, Dec 7, 2016 at 11:34 AM, Amit Langote <amitlangot...@gmail.com> wrote: >> begin; >> create schema if not exists s; >> create table s.t (c text, d text, id serial) partition by list >> ((ascii(substring(coalesce(c, d, ''), 1, 1)))); >> create table s.t_part_ascii_065 partition of s.t for values in ( 65 ); >> >> it logs as follows: >> >> 2016-12-07 17:03:45.787 CET 6125 LOG: server process (PID 11503) was >> terminated by signal 11: Segmentation fault >> 2016-12-07 17:03:45.787 CET 6125 DETAIL: Failed process was running: create >> table s.t_part_ascii_065 partition of s.t for values in ( 65 ); > > Hm, will look into this in a few hours.
My bad. The fix I sent last night for one of the cache flush issues wasn't quite right. The attached seems to fix it. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index ae77d15..a230b20 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -2516,6 +2516,7 @@ RelationClearRelation(Relation relation, bool rebuild) bool keep_tupdesc; bool keep_rules; bool keep_policies; + bool keep_partkey; bool keep_partdesc; /* Build temporary entry, but don't link it into hashtable */ @@ -2547,6 +2548,7 @@ RelationClearRelation(Relation relation, bool rebuild) keep_tupdesc = equalTupleDescs(relation->rd_att, newrel->rd_att); keep_rules = equalRuleLocks(relation->rd_rules, newrel->rd_rules); keep_policies = equalRSDesc(relation->rd_rsdesc, newrel->rd_rsdesc); + keep_partkey = (relation->rd_partkey != NULL); keep_partdesc = equalPartitionDescs(relation->rd_partkey, relation->rd_partdesc, newrel->rd_partdesc); @@ -2604,9 +2606,12 @@ RelationClearRelation(Relation relation, bool rebuild) SWAPFIELD(Oid, rd_toastoid); /* pgstat_info must be preserved */ SWAPFIELD(struct PgStat_TableStatus *, pgstat_info); - /* partition key must be preserved */ - SWAPFIELD(PartitionKey, rd_partkey); - SWAPFIELD(MemoryContext, rd_partkeycxt); + /* partition key must be preserved, if we have one */ + if (keep_partkey) + { + SWAPFIELD(PartitionKey, rd_partkey); + SWAPFIELD(MemoryContext, rd_partkeycxt); + } /* preserve old partdesc if no logical change */ if (keep_partdesc) {
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers