当我尝试通过alter命令更改表中列的数据类型时...
alter table temp alter column id type bigserial;
我知道
ERROR: type "bigserial" does not exist
如何将数据类型从bigint更改为bigserial?
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