如何将BIGSERIAL数据类型改为String?遇标识列类型限制报错求助
解决PostgreSQL中BIGSERIAL列修改为VARCHAR类型的报错问题
你遇到的报错是因为BIGSERIAL本质是带有IDENTITY自增属性的BIGINT列,PostgreSQL不允许直接修改IDENTITY列的类型为非数值类型,必须先移除该列的IDENTITY属性,再修改类型。
操作步骤:
- 移除a_id列的IDENTITY属性
ALTER TABLE a_table ALTER COLUMN a_id DROP IDENTITY IF EXISTS;
IF EXISTS用于避免列无IDENTITY属性时触发报错,提升语句兼容性。
- 修改列类型为VARCHAR(255)
ALTER TABLE a_table ALTER COLUMN a_id TYPE VARCHAR(255) USING (a_id::VARCHAR(255));
原理说明:
PostgreSQL中BIGSERIAL是语法糖,创建时会自动完成三个操作:
- 创建一个BIGINT类型的列
- 关联一个序列用于自增
- 给列添加IDENTITY约束(标识该列为自增列)
正是这个IDENTITY约束限制了列类型只能是smallint、integer或bigint,所以必须先移除约束才能修改类型。
内容的提问来源于stack exchange,提问作者AbrA
相关产品推荐
相关产品推荐

