From 1d6c72a55b23554cfb946527dc77f9d80044ae2c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 6 May 2013 13:26:51 -0400 Subject: Move materialized views' is-populated status into their pg_class entries. Previously this state was represented by whether the view's disk file had zero or nonzero size, which is problematic for numerous reasons, since it's breaking a fundamental assumption about heap storage. This was done to allow unlogged matviews to revert to unpopulated status after a crash despite our lack of any ability to update catalog entries post-crash. However, this poses enough risk of future problems that it seems better to not support unlogged matviews until we can find another way. Accordingly, revert that choice as well as a number of existing kluges forced by it in favor of creating a pg_class.relispopulated flag column. --- src/backend/commands/createas.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/backend/commands/createas.c') diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c index de65c4c7817..14973f8e7c4 100644 --- a/src/backend/commands/createas.c +++ b/src/backend/commands/createas.c @@ -359,10 +359,6 @@ intorel_startup(DestReceiver *self, int operation, TupleDesc typeinfo) */ intoRelationDesc = heap_open(intoRelationId, AccessExclusiveLock); - if (is_matview && !into->skipData) - /* Make sure the heap looks good even if no rows are written. */ - SetMatViewToPopulated(intoRelationDesc); - /* * Check INSERT permission on the constructed table. * @@ -381,6 +377,13 @@ intorel_startup(DestReceiver *self, int operation, TupleDesc typeinfo) ExecCheckRTPerms(list_make1(rte), true); + /* + * Tentatively mark the target as populated, if it's a matview and we're + * going to fill it; otherwise, no change needed. + */ + if (is_matview && !into->skipData) + SetMatViewPopulatedState(intoRelationDesc, true); + /* * Fill private fields of myState for use by later routines */ -- cgit v1.2.3