mirror of
https://github.com/postgres/postgres.git
synced 2025-08-27 07:42:10 +03:00
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.
This commit is contained in:
@@ -461,7 +461,6 @@ extern Datum pg_table_size(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_indexes_size(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_relation_filenode(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_relation_filepath(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_relation_is_scannable(PG_FUNCTION_ARGS);
|
||||
|
||||
/* genfile.c */
|
||||
extern bytea *read_binary_file(const char *filename,
|
||||
|
@@ -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 */
|
||||
|
Reference in New Issue
Block a user