PostgreSQL列类型从bigint转换为bigserial

问题描述 投票:21回答:3

当我尝试通过alter命令更改表中列的数据类型时...

alter table temp alter column id type bigserial;

我知道

ERROR:  type "bigserial" does not exist

如何将数据类型从bigint更改为bigserial?

sql database postgresql persistence
3个回答
26
投票
因此,虽然不能仅通过更改类型来更改它,但可以通过自己运行以下其他命令来达到相同的效果:

CREATE SEQUENCE temp_id_seq; ALTER TABLE temp ALTER COLUMN id SET NOT NULL; ALTER TABLE temp ALTER COLUMN id SET DEFAULT nextval('temp_id_seq'); ALTER SEQUENCE temp_id_seq OWNED BY temp.id;

更改所有者将确保删除表/列后删除该序列。它还将为您提供pg_get_serial_sequence()功能中的预期行为。

注意使用tablename_columnname_seq命名约定,才能说服pgAdmin等工具将此列类型报告为BIGSERIAL。请注意,即使该列最初被声明为SERIAL类型,psql和pg_dump仍将始终显示基础定义。

从Postgres 10开始,您还可以选择使用SQL标准identity column,该标准可以无形地处理所有这些,并且可以轻松地将其添加到现有表中:

ALTER TABLE temp ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY


9
投票

2
投票
© www.soinside.com 2019 - 2024. All rights reserved.