!5828 物化视图功能增强,补齐功能,包括支持删除操作
Merge pull request !5828 from TinyBag/matview
This commit is contained in:
@ -62,6 +62,6 @@
|
||||
|
||||
#define NAILED_IN_CATALOG_NUM 8
|
||||
|
||||
#define CATALOG_NUM 110
|
||||
#define CATALOG_NUM 111
|
||||
|
||||
#endif
|
||||
|
||||
@ -73,6 +73,11 @@ extern void insert_matviewdep_tuple(Oid matviewOid, Oid relid, Oid mlogid);
|
||||
extern void delete_matviewdep_tuple(Oid matviewOid);
|
||||
extern void delete_matdep_table(Oid mlogid);
|
||||
|
||||
extern void insert_matview_log_tuple(Oid mlog, Oid relid);
|
||||
extern Oid delete_matview_log_tuple(Oid relid);
|
||||
extern void invalidate_matdep_mlog(Oid relid);
|
||||
extern void validate_matdep_mlog(Oid mlogid, Oid relid);
|
||||
|
||||
extern Datum get_matview_refreshtime(Oid matviewOid, bool *isNUll);
|
||||
extern Datum get_matview_mapid(Oid matviewOid);
|
||||
extern bool is_incremental_matview(Oid oid);
|
||||
|
||||
23
src/include/catalog/gs_matview_log.h
Normal file
23
src/include/catalog/gs_matview_log.h
Normal file
@ -0,0 +1,23 @@
|
||||
#ifndef GS_MATVIEW_LOG_H
|
||||
#define GS_MATVIEW_LOG_H
|
||||
|
||||
#include "catalog/genbki.h"
|
||||
#include "nodes/parsenodes.h"
|
||||
|
||||
#define MatviewLogRelationId 9753
|
||||
#define MatviewLogRelationId_Rowtype_Id 9756
|
||||
|
||||
CATALOG(gs_matview_log,9753) BKI_WITHOUT_OIDS BKI_SCHEMA_MACRO
|
||||
{
|
||||
Oid mlogid;
|
||||
Oid relid;
|
||||
} FormData_gs_matview_log;
|
||||
|
||||
typedef FormData_gs_matview_log *Form_gs_matview_log;
|
||||
|
||||
#define Natts_gs_matview_log 2
|
||||
|
||||
#define Anum_gs_matview_log_mlogid 1
|
||||
#define Anum_gs_matview_relid 2
|
||||
|
||||
#endif /* GS_MATVIEW_LOG_H */
|
||||
@ -621,6 +621,10 @@ DECLARE_UNIQUE_INDEX(gs_matview_oid_index, 9991, on gs_matview using btree(oid o
|
||||
#define GsMatviewOidIndexId 9991
|
||||
DECLARE_UNIQUE_INDEX(gs_matviewdep_oid_index, 9992, on gs_matview_dependency using btree(oid oid_ops));
|
||||
#define GsMatviewDepOidIndexId 9992
|
||||
DECLARE_UNIQUE_INDEX(gs_matviewlog_mlogid_index, 9754, on gs_matview_log using btree(mlogid oid_ops));
|
||||
#define GsMatviewLogMlogIdIndexId 9754
|
||||
DECLARE_UNIQUE_INDEX(gs_matviewlog_relid_index, 9755, on gs_matview_log using btree(relid oid_ops));
|
||||
#define GsMatviewLogRelidIndexId 9755
|
||||
|
||||
/* Add indexes for pg_recyclebin */
|
||||
DECLARE_UNIQUE_INDEX(gs_recyclebin_id_index, 8647, on gs_recyclebin using btree(oid oid_ops));
|
||||
|
||||
@ -0,0 +1,4 @@
|
||||
DROP INDEX IF EXISTS pg_catalog.gs_matviewlog_mlogid_index;
|
||||
DROP INDEX IF EXISTS pg_catalog.gs_matviewlog_relid_index;
|
||||
DROP TABLE IF EXISTS pg_catalog.gs_matview_log;
|
||||
DROP TYPE IF EXISTS pg_catalog.gs_matview_log;
|
||||
@ -0,0 +1,4 @@
|
||||
DROP INDEX IF EXISTS pg_catalog.gs_matviewlog_mlogid_index;
|
||||
DROP INDEX IF EXISTS pg_catalog.gs_matviewlog_relid_index;
|
||||
DROP TABLE IF EXISTS pg_catalog.gs_matview_log;
|
||||
DROP TYPE IF EXISTS pg_catalog.gs_matview_log;
|
||||
@ -0,0 +1,18 @@
|
||||
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 9753, 9756, 0, 0;
|
||||
DROP INDEX IF EXISTS pg_catalog.gs_matviewlog_mlogid_index;
|
||||
DROP INDEX IF EXISTS pg_catalog.gs_matviewlog_relid_index;
|
||||
DROP TABLE IF EXISTS pg_catalog.gs_matview_log;
|
||||
DROP TYPE IF EXISTS pg_catalog.gs_matview_log;
|
||||
CREATE TABLE IF NOT EXISTS pg_catalog.gs_matview_log
|
||||
(
|
||||
mlogid Oid NOCOMPRESS NOT NULL,
|
||||
relid Oid NOCOMPRESS NOT NULL
|
||||
);
|
||||
|
||||
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 9754;
|
||||
CREATE UNIQUE INDEX gs_matviewlog_mlogid_index ON pg_catalog.gs_matview_log USING BTREE(mlogid oid_ops);
|
||||
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 9755;
|
||||
CREATE UNIQUE INDEX gs_matviewlog_relid_index ON pg_catalog.gs_matview_log USING BTREE(relid oid_ops);
|
||||
GRANT SELECT ON TABLE pg_catalog.gs_matview_log TO PUBLIC;
|
||||
|
||||
INSERT INTO pg_catalog.gs_matview_log SELECT DISTINCT mlogid, relid FROM pg_catalog.gs_matview_dependency;
|
||||
@ -0,0 +1,18 @@
|
||||
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 9753, 9756, 0, 0;
|
||||
DROP INDEX IF EXISTS pg_catalog.gs_matviewlog_mlogid_index;
|
||||
DROP INDEX IF EXISTS pg_catalog.gs_matviewlog_relid_index;
|
||||
DROP TABLE IF EXISTS pg_catalog.gs_matview_log;
|
||||
DROP TYPE IF EXISTS pg_catalog.gs_matview_log;
|
||||
CREATE TABLE IF NOT EXISTS pg_catalog.gs_matview_log
|
||||
(
|
||||
mlogid Oid NOCOMPRESS NOT NULL,
|
||||
relid Oid NOCOMPRESS NOT NULL
|
||||
);
|
||||
|
||||
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 9754;
|
||||
CREATE UNIQUE INDEX gs_matviewlog_mlogid_index ON pg_catalog.gs_matview_log USING BTREE(mlogid oid_ops);
|
||||
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 9755;
|
||||
CREATE UNIQUE INDEX gs_matviewlog_relid_index ON pg_catalog.gs_matview_log USING BTREE(relid oid_ops);
|
||||
GRANT SELECT ON TABLE pg_catalog.gs_matview_log TO PUBLIC;
|
||||
|
||||
INSERT INTO pg_catalog.gs_matview_log SELECT DISTINCT mlogid, relid FROM pg_catalog.gs_matview_dependency;
|
||||
@ -67,10 +67,14 @@ extern Oid create_matview_map(Oid intoRelationId);
|
||||
extern void insert_into_matview_map(Oid mapid, Oid matid, ItemPointer matcitd,
|
||||
Oid relid, ItemPointer relctid, TransactionId xid);
|
||||
extern Oid find_matview_mlog_table(Oid relid);
|
||||
extern bool is_table_in_incre_matview(Oid relid);
|
||||
extern void insert_into_mlog_table(Relation rel, Oid mlogid, HeapTuple tuple,
|
||||
ItemPointer tid, TransactionId xid, char action);
|
||||
extern void create_matview_meta(Query *query, RangeVar *rel, bool incremental);
|
||||
|
||||
extern ObjectAddress CreateMatViewLog(CreateMatViewLogStmt* parse_tree);
|
||||
extern void DropMatViewLog(DropMatViewLogStmt* parse_tree);
|
||||
|
||||
extern void check_matview_op_supported(CreateTableAsStmt *ctas);
|
||||
extern DistributeBy *infer_incmatview_distkey(CreateTableAsStmt *stmt);
|
||||
extern void check_basetable_permission(Query *query);
|
||||
|
||||
@ -246,6 +246,7 @@ extern void ExecuteTimeCapsule(TimeCapsuleStmt* stmt);
|
||||
extern void truncate_check_rel(Relation rel);
|
||||
extern void CheckDropViewValidity(ObjectType stmtType, char relKind, const char* relname);
|
||||
extern int getPartitionElementsIndexByOid(Relation partTableRel, Oid partOid);
|
||||
extern void DropRelationPermissionCheck(char relkind, Oid relOid, Oid nspOid, const char* relname);
|
||||
|
||||
extern void SetPartionIndexType(IndexStmt* stmt, Relation rel, bool is_alter_table);
|
||||
extern bool ConstraintSatisfyAutoIncrement(HeapTuple tuple, TupleDesc desc, AttrNumber attrnum, char contype);
|
||||
|
||||
@ -589,6 +589,8 @@ typedef enum NodeTag {
|
||||
T_ShrinkStmt,
|
||||
T_VariableMultiSetStmt,
|
||||
T_CursorExpression,
|
||||
T_CreateMatViewLogStmt,
|
||||
T_DropMatViewLogStmt,
|
||||
/*
|
||||
* TAGS FOR PARSE TREE NODES (parsenodes.h)
|
||||
* note: TAGS FOR PARSE TREE NODES (parsenodes.h) can no longer place new tags,
|
||||
|
||||
@ -2188,6 +2188,26 @@ typedef struct RefreshMatViewStmt
|
||||
RangeVar *relation; /* relation to insert into */
|
||||
} RefreshMatViewStmt;
|
||||
|
||||
/* ----------------------
|
||||
* CREATE MATERIALIZED VIEW LOG Statement
|
||||
* ----------------------
|
||||
*/
|
||||
typedef struct CreateMatViewLogStmt
|
||||
{
|
||||
NodeTag type;
|
||||
RangeVar* relation; /* relation to create matview log for */
|
||||
} CreateMatViewLogStmt;
|
||||
|
||||
/* ----------------------
|
||||
* DROP MATERIALIZED VIEW LOG Statement
|
||||
* ----------------------
|
||||
*/
|
||||
typedef struct DropMatViewLogStmt
|
||||
{
|
||||
NodeTag type;
|
||||
RangeVar* relation; /* relation to drop matview log from */
|
||||
} DropMatViewLogStmt;
|
||||
|
||||
/* ----------------------
|
||||
* Checkpoint Statement
|
||||
* ----------------------
|
||||
|
||||
@ -85,6 +85,7 @@ PG_KEYWORD("boolean", BOOLEAN_P, COL_NAME_KEYWORD)
|
||||
PG_KEYWORD("both", BOTH, RESERVED_KEYWORD)
|
||||
PG_KEYWORD("bucketcnt", BUCKETCNT, COL_NAME_KEYWORD)
|
||||
PG_KEYWORD("buckets", BUCKETS, RESERVED_KEYWORD)
|
||||
PG_KEYWORD("build", BUILD, UNRESERVED_KEYWORD)
|
||||
PG_KEYWORD("by", BY, UNRESERVED_KEYWORD)
|
||||
PG_KEYWORD("byte", BYTE_P, UNRESERVED_KEYWORD)
|
||||
PG_KEYWORD("byteawithoutorder", BYTEAWITHOUTORDER, COL_NAME_KEYWORD)
|
||||
|
||||
@ -292,6 +292,7 @@ typedef struct RelationData {
|
||||
/* double linked list node, partition and bucket relation would be stored in fakerels list of resource owner */
|
||||
dlist_node node;
|
||||
|
||||
/* only valid if has mlog and used by incremental matview */
|
||||
Oid rd_mlogoid;
|
||||
/* Is under the context of creating crossbucket index? */
|
||||
bool newcbi;
|
||||
|
||||
Reference in New Issue
Block a user