!3333 修复通过同义词refresh物化视图失败的问题
Merge pull request !3333 from chenxiaobin/fixMatViewSyn
This commit is contained in:
@ -520,6 +520,7 @@ char* CheckReferencedObject(Oid relOid, RangeVar* objVar, const char* synName)
|
||||
case RELKIND_CONTQUERY:
|
||||
case RELKIND_FOREIGN_TABLE:
|
||||
case RELKIND_STREAM:
|
||||
case RELKIND_MATVIEW:
|
||||
break;
|
||||
case RELKIND_COMPOSITE_TYPE:
|
||||
appendStringInfo(
|
||||
|
||||
@ -829,7 +829,7 @@ ObjectAddress ExecRefreshMatViewInc(RefreshMatViewStmt *stmt, const char *queryS
|
||||
*/
|
||||
matviewOid = RangeVarGetRelidExtended(stmt->relation,
|
||||
ExclusiveLock,
|
||||
false, false, false, false,
|
||||
false, false, false, true,
|
||||
RangeVarCallbackOwnsTable, NULL);
|
||||
|
||||
Oid mapid = DatumGetObjectId(get_matview_mapid(matviewOid));
|
||||
@ -945,7 +945,7 @@ ObjectAddress ExecRefreshIncMatViewAll(RefreshMatViewStmt *stmt, const char *que
|
||||
*/
|
||||
matviewOid = RangeVarGetRelidExtended(stmt->relation,
|
||||
AccessExclusiveLock,
|
||||
false, false, false, false,
|
||||
false, false, false, true,
|
||||
RangeVarCallbackOwnsTable, NULL);
|
||||
mapid = DatumGetObjectId(get_matview_mapid(matviewOid));
|
||||
matviewRel = heap_open(matviewOid, AccessExclusiveLock);
|
||||
@ -1054,7 +1054,7 @@ ObjectAddress ExecRefreshCtasMatViewAll(RefreshMatViewStmt *stmt, const char *qu
|
||||
* Get a lock until end of transaction.
|
||||
*/
|
||||
matviewOid = RangeVarGetRelidExtended(stmt->relation,
|
||||
AccessExclusiveLock, false, false, false, false,
|
||||
AccessExclusiveLock, false, false, false, true,
|
||||
RangeVarCallbackOwnsTable, NULL);
|
||||
matviewRel = heap_open(matviewOid, NoLock);
|
||||
|
||||
@ -1167,7 +1167,7 @@ bool isIncMatView(RangeVar *rv)
|
||||
{
|
||||
Oid matviewOid = RangeVarGetRelidExtended(rv,
|
||||
NoLock,
|
||||
false, false, false, false,
|
||||
false, false, false, true,
|
||||
RangeVarCallbackOwnsTable, NULL);
|
||||
Relation matviewRel = heap_open(matviewOid, AccessShareLock);
|
||||
|
||||
|
||||
@ -6197,7 +6197,9 @@ ProcessUtilitySlow(Node *parse_tree,
|
||||
/* something happen on datanodes */
|
||||
if (IS_PGXC_DATANODE)
|
||||
#else
|
||||
Relation matview = heap_openrv(stmt->relation, stmt->incremental ? ExclusiveLock : AccessExclusiveLock);
|
||||
Relation matview = HeapOpenrvExtended(stmt->relation,
|
||||
stmt->incremental ? ExclusiveLock : AccessExclusiveLock,
|
||||
false, true);
|
||||
CheckRefreshMatview(matview, is_incremental_matview(matview->rd_id));
|
||||
heap_close(matview, NoLock);
|
||||
#endif
|
||||
|
||||
@ -124,5 +124,22 @@ select oid, relname from pg_class where relname like 'mlog%';
|
||||
--------+------+------+-------+---------
|
||||
(0 rows)
|
||||
|
||||
create table test_syn(id int unique,a1 varchar(20));
|
||||
NOTICE: CREATE TABLE / UNIQUE will create implicit index "test_syn_id_key" for table "test_syn"
|
||||
create materialized view mv_test_syn as select * from test_syn;
|
||||
create incremental materialized view imv_test_syn as select * from test_syn;
|
||||
create synonym s_mv_test_syn for mv_test_syn;
|
||||
create synonym s_imv_test_syn for imv_test_syn;
|
||||
REFRESH MATERIALIZED VIEW s_mv_test_syn;
|
||||
REFRESH MATERIALIZED VIEW s_imv_test_syn;
|
||||
REFRESH INCREMENTAL MATERIALIZED VIEW s_mv_test_syn;
|
||||
ERROR: "mv_test_syn" is not an incremental materialized view
|
||||
REFRESH INCREMENTAL MATERIALIZED VIEW s_imv_test_syn;
|
||||
drop synonym s_mv_test_syn;
|
||||
drop synonym s_imv_test_syn;
|
||||
drop table test_syn cascade;
|
||||
NOTICE: drop cascades to 2 other objects
|
||||
DETAIL: drop cascades to materialized view mv_test_syn
|
||||
drop cascades to materialized view imv_test_syn
|
||||
\c regression
|
||||
drop database test_imv_db;
|
||||
|
||||
@ -57,5 +57,20 @@ drop table imv1_t cascade;
|
||||
select oid, relname from pg_class where relname like 'mlog%';
|
||||
\d
|
||||
|
||||
create table test_syn(id int unique,a1 varchar(20));
|
||||
create materialized view mv_test_syn as select * from test_syn;
|
||||
create incremental materialized view imv_test_syn as select * from test_syn;
|
||||
create synonym s_mv_test_syn for mv_test_syn;
|
||||
create synonym s_imv_test_syn for imv_test_syn;
|
||||
|
||||
REFRESH MATERIALIZED VIEW s_mv_test_syn;
|
||||
REFRESH MATERIALIZED VIEW s_imv_test_syn;
|
||||
REFRESH INCREMENTAL MATERIALIZED VIEW s_mv_test_syn;
|
||||
REFRESH INCREMENTAL MATERIALIZED VIEW s_imv_test_syn;
|
||||
|
||||
drop synonym s_mv_test_syn;
|
||||
drop synonym s_imv_test_syn;
|
||||
drop table test_syn cascade;
|
||||
|
||||
\c regression
|
||||
drop database test_imv_db;
|
||||
|
||||
Reference in New Issue
Block a user