mirror of https://github.com/citusdata/citus.git
Disallow using alter_table udfs with tables having any identity cols (#4635)
pg_get_tableschemadef_string doesn't know how to deparse identity columns so we cannot reflect those columns when creating table from scratch. For this reason, we don't allow using alter_table udfs with tables having any identity cols.pull/4508/head
parent
3a403090fd
commit
c0f2817b70
|
@ -909,6 +909,20 @@ CreateTableConversion(TableConversionParameters *params)
|
||||||
ereport(ERROR, (errmsg("cannot complete operation "
|
ereport(ERROR, (errmsg("cannot complete operation "
|
||||||
"because no such table exists")));
|
"because no such table exists")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TupleDesc relationDesc = RelationGetDescr(relation);
|
||||||
|
if (RelationUsesIdentityColumns(relationDesc))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* pg_get_tableschemadef_string doesn't know how to deparse identity
|
||||||
|
* columns so we cannot reflect those columns when creating table
|
||||||
|
* from scratch. For this reason, error out here.
|
||||||
|
*/
|
||||||
|
ereport(ERROR, (errmsg("cannot complete command because relation "
|
||||||
|
"%s has identity column",
|
||||||
|
generate_qualified_relation_name(con->relationId)),
|
||||||
|
errhint("Drop the identity columns and re-try the command")));
|
||||||
|
}
|
||||||
relation_close(relation, NoLock);
|
relation_close(relation, NoLock);
|
||||||
con->distributionKey =
|
con->distributionKey =
|
||||||
BuildDistributionKeyFromColumnName(relation, con->distributionColumn);
|
BuildDistributionKeyFromColumnName(relation, con->distributionColumn);
|
||||||
|
|
|
@ -676,6 +676,11 @@ SELECT relname, relkind
|
||||||
v_ref | v
|
v_ref | v
|
||||||
(6 rows)
|
(6 rows)
|
||||||
|
|
||||||
|
CREATE TABLE identity_cols_test (a int, b int generated by default as identity (increment by 42));
|
||||||
|
-- errors out since we don't support alter_table.* udfs with tables having any identity columns
|
||||||
|
SELECT alter_table_set_access_method('identity_cols_test', 'columnar');
|
||||||
|
ERROR: cannot complete command because relation alter_table_set_access_method.identity_cols_test has identity column
|
||||||
|
HINT: Drop the identity columns and re-try the command
|
||||||
SET client_min_messages TO WARNING;
|
SET client_min_messages TO WARNING;
|
||||||
DROP SCHEMA alter_table_set_access_method CASCADE;
|
DROP SCHEMA alter_table_set_access_method CASCADE;
|
||||||
SELECT 1 FROM master_remove_node('localhost', :master_port);
|
SELECT 1 FROM master_remove_node('localhost', :master_port);
|
||||||
|
|
|
@ -209,6 +209,10 @@ SELECT relname, relkind
|
||||||
)
|
)
|
||||||
ORDER BY relname ASC;
|
ORDER BY relname ASC;
|
||||||
|
|
||||||
|
CREATE TABLE identity_cols_test (a int, b int generated by default as identity (increment by 42));
|
||||||
|
-- errors out since we don't support alter_table.* udfs with tables having any identity columns
|
||||||
|
SELECT alter_table_set_access_method('identity_cols_test', 'columnar');
|
||||||
|
|
||||||
SET client_min_messages TO WARNING;
|
SET client_min_messages TO WARNING;
|
||||||
DROP SCHEMA alter_table_set_access_method CASCADE;
|
DROP SCHEMA alter_table_set_access_method CASCADE;
|
||||||
SELECT 1 FROM master_remove_node('localhost', :master_port);
|
SELECT 1 FROM master_remove_node('localhost', :master_port);
|
||||||
|
|
Loading…
Reference in New Issue