diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2013-05-06 13:26:51 -0400 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2013-05-06 13:27:22 -0400 |
| commit | 1d6c72a55b23554cfb946527dc77f9d80044ae2c (patch) | |
| tree | 8f7964a0114022585c1a0d90f37d2fd466bb6154 /src/include/utils/rel.h | |
| parent | 5da5798004e90b14332918e7db702271442d465d (diff) | |
| download | postgresql-1d6c72a55b23554cfb946527dc77f9d80044ae2c.tar.gz | |
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.
Diffstat (limited to 'src/include/utils/rel.h')
| -rw-r--r-- | src/include/utils/rel.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h index 632743af94..4b833c5018 100644 --- a/src/include/utils/rel.h +++ b/src/include/utils/rel.h @@ -77,7 +77,6 @@ typedef struct RelationData BackendId rd_backend; /* owning backend id, if temporary relation */ bool rd_islocaltemp; /* rel is a temp rel of this session */ bool rd_isnailed; /* rel is nailed in cache */ - bool rd_ispopulated; /* matview has query results */ bool rd_isvalid; /* relcache entry is valid */ char rd_indexvalid; /* state of rd_indexlist: 0 = not valid, 1 = * valid, 2 = temporarily forced */ @@ -408,7 +407,15 @@ typedef struct StdRdOptions * populated by its query. This is likely to get more complicated later, * so use a macro which looks like a function. */ -#define RelationIsScannable(relation) ((relation)->rd_ispopulated) +#define RelationIsScannable(relation) ((relation)->rd_rel->relispopulated) + +/* + * RelationIsPopulated + * Currently, we don't physically distinguish the "populated" and + * "scannable" properties of matviews, but that may change later. + * Hence, use the appropriate one of these macros in code tests. + */ +#define RelationIsPopulated(relation) ((relation)->rd_rel->relispopulated) /* routines in utils/cache/relcache.c */ |
