diff --git a/src/backend/distributed/commands/alter_table.c b/src/backend/distributed/commands/alter_table.c index 4378a8555..fef1f41da 100644 --- a/src/backend/distributed/commands/alter_table.c +++ b/src/backend/distributed/commands/alter_table.c @@ -455,6 +455,14 @@ AlterTableSetAccessMethod(TableConversionParameters *params) params->conversionType = ALTER_TABLE_SET_ACCESS_METHOD; params->shardCountIsNull = true; TableConversionState *con = CreateTableConversion(params); + + if (strcmp(con->originalAccessMethod, con->accessMethod) == 0) + { + ereport(ERROR, (errmsg("the access method of %s is already %s", + generate_qualified_relation_name(con->relationId), + con->accessMethod))); + } + return ConvertTable(con); } diff --git a/src/test/regress/expected/alter_table_set_access_method.out b/src/test/regress/expected/alter_table_set_access_method.out index 5c00c935d..b4fc1ba61 100644 --- a/src/test/regress/expected/alter_table_set_access_method.out +++ b/src/test/regress/expected/alter_table_set_access_method.out @@ -455,6 +455,10 @@ NOTICE: Renaming the new table to alter_table_set_access_method.test_fk_p1 ERROR: Foreign keys and AFTER ROW triggers are not supported for columnar tables HINT: Consider an AFTER STATEMENT trigger instead. CONTEXT: SQL statement "ALTER TABLE alter_table_set_access_method.test_fk_p ATTACH PARTITION alter_table_set_access_method.test_fk_p1 FOR VALUES FROM (10) TO (20);" +-- test changing into same access method +CREATE TABLE same_access_method (a INT); +SELECT alter_table_set_access_method('same_access_method', 'heap'); +ERROR: the access method of alter_table_set_access_method.same_access_method is already heap SET client_min_messages TO WARNING; DROP SCHEMA alter_table_set_access_method CASCADE; SELECT 1 FROM master_remove_node('localhost', :master_port); diff --git a/src/test/regress/sql/alter_table_set_access_method.sql b/src/test/regress/sql/alter_table_set_access_method.sql index e5b817053..9e6b5a6ff 100644 --- a/src/test/regress/sql/alter_table_set_access_method.sql +++ b/src/test/regress/sql/alter_table_set_access_method.sql @@ -139,6 +139,10 @@ create table test_fk_p0 partition of test_fk_p for values from (0) to (10); create table test_fk_p1 partition of test_fk_p for values from (10) to (20); select alter_table_set_access_method('test_fk_p1', 'columnar'); +-- test changing into same access method +CREATE TABLE same_access_method (a INT); +SELECT alter_table_set_access_method('same_access_method', 'heap'); + SET client_min_messages TO WARNING; DROP SCHEMA alter_table_set_access_method CASCADE; SELECT 1 FROM master_remove_node('localhost', :master_port);