diff --git a/src/gausskernel/optimizer/commands/tablecmds.cpp b/src/gausskernel/optimizer/commands/tablecmds.cpp index e6a6e524f..80d654d11 100755 --- a/src/gausskernel/optimizer/commands/tablecmds.cpp +++ b/src/gausskernel/optimizer/commands/tablecmds.cpp @@ -13280,6 +13280,8 @@ static ObjectAddress ATExecAddColumn(List** wqueue, AlteredTableInfo* tab, Relat query_str = CheckPgRewriteFirstAfter(rel); tab->rewrite |= AT_REWRITE_ALTER_PERSISTENCE; tab->is_first_after = true; + } else if (rel->rd_rel->relkind == RELKIND_RELATION) { + query_str = CheckPgRewriteFirstAfter(rel); } InsertPgAttributeTuple(attrdesc, &attribute, NULL); @@ -13322,6 +13324,19 @@ static ObjectAddress ATExecAddColumn(List** wqueue, AlteredTableInfo* tab, Relat /* create or replace view */ ReplaceViewQueryFirstAfter(query_str); + } else if (rel->rd_rel->relkind == RELKIND_RELATION && query_str != NIL) { + ListCell* viewinfo = NULL; + bool isViewValid = true; + foreach (viewinfo, query_str) { + ViewInfoForAdd *info = (ViewInfoForAdd *)lfirst(viewinfo); + isViewValid &= GetPgObjectValid(info->ev_class, OBJECT_TYPE_VIEW); + if (!isViewValid) { + break; + } + } + if (isViewValid) { + ReplaceViewQueryFirstAfter(query_str); + } } /* diff --git a/src/test/regress/expected/alter_table_modify.out b/src/test/regress/expected/alter_table_modify.out index 14c207430..c44c02b91 100644 --- a/src/test/regress/expected/alter_table_modify.out +++ b/src/test/regress/expected/alter_table_modify.out @@ -3183,9 +3183,9 @@ ALTER TABLE test_at_modify_view_column MODIFY column f1 varchar(20), ADD COLUMN ERROR: cannot change data type of view column "f1" from integer to character varying(20) ALTER TABLE test_at_modify_view_column MODIFY column f1 int, ADD COLUMN f0 int; SELECT pg_get_viewdef('test_modify_view_star'::regclass); - pg_get_viewdef --------------------------------------------- - SELECT * FROM test_at_modify_view_column; + pg_get_viewdef +-------------------------------------------------------------------------------------------------------------------------------------------------------------------- + SELECT test_at_modify_view_column.f4, test_at_modify_view_column.f3, test_at_modify_view_column.f2, test_at_modify_view_column.f1 FROM test_at_modify_view_column; (1 row) SELECT * FROM test_modify_view_star; @@ -3388,9 +3388,9 @@ ALTER TABLE test_at_modify_view_column CHANGE column f1 c1 varchar(20), ADD COL ERROR: cannot change data type of view column "f1" from integer to character varying(20) ALTER TABLE test_at_modify_view_column CHANGE column f1 c1 int, ADD COLUMN f0 int; SELECT pg_get_viewdef('test_modify_view_star'::regclass); - pg_get_viewdef --------------------------------------------- - SELECT * FROM test_at_modify_view_column; + pg_get_viewdef +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + SELECT test_at_modify_view_column.f4, test_at_modify_view_column.f3, test_at_modify_view_column.f2, test_at_modify_view_column.c1 AS f1 FROM test_at_modify_view_column; (1 row) SELECT * FROM test_modify_view_star; diff --git a/src/test/regress/expected/alter_table_modify_ustore.out b/src/test/regress/expected/alter_table_modify_ustore.out index 77f21f37a..a228d781b 100644 --- a/src/test/regress/expected/alter_table_modify_ustore.out +++ b/src/test/regress/expected/alter_table_modify_ustore.out @@ -2787,9 +2787,9 @@ ALTER TABLE test_at_modify_view_column MODIFY column f1 varchar(20), ADD COLUMN ERROR: cannot change data type of view column "f1" from integer to character varying(20) ALTER TABLE test_at_modify_view_column MODIFY column f1 int, ADD COLUMN f0 int; SELECT pg_get_viewdef('test_modify_view_star'::regclass); - pg_get_viewdef --------------------------------------------- - SELECT * FROM test_at_modify_view_column; + pg_get_viewdef +-------------------------------------------------------------------------------------------------------------------------------------------------------------------- + SELECT test_at_modify_view_column.f4, test_at_modify_view_column.f3, test_at_modify_view_column.f2, test_at_modify_view_column.f1 FROM test_at_modify_view_column; (1 row) SELECT * FROM test_modify_view_star; @@ -2992,9 +2992,9 @@ ALTER TABLE test_at_modify_view_column CHANGE column f1 c1 varchar(20), ADD COL ERROR: cannot change data type of view column "f1" from integer to character varying(20) ALTER TABLE test_at_modify_view_column CHANGE column f1 c1 int, ADD COLUMN f0 int; SELECT pg_get_viewdef('test_modify_view_star'::regclass); - pg_get_viewdef --------------------------------------------- - SELECT * FROM test_at_modify_view_column; + pg_get_viewdef +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + SELECT test_at_modify_view_column.f4, test_at_modify_view_column.f3, test_at_modify_view_column.f2, test_at_modify_view_column.c1 AS f1 FROM test_at_modify_view_column; (1 row) SELECT * FROM test_modify_view_star;