gpt4 book ai didi

sql - PostgreSQL 列类型从 bigint 到 bigserial 的转换

转载 作者:太空狗 更新时间:2023-10-30 01:40:17 25 4
gpt4 key购买 nike

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

alter table temp alter column id type bigserial;

我明白了

ERROR:  type "bigserial" does not exist

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

最佳答案

documentation 中所述, SERIAL 不是数据类型,而是其他命令集合的快捷方式。

因此,虽然您不能仅通过更改类型来更改它,但您可以通过自己运行这些其他命令来达到相同的效果:

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。请注意,psql 和 pg_dump 将始终显示底层定义,即使该列最初声明为 SERIAL 类型。

从 Postgres 10 开始,您还可以选择使用 SQL 标准 identity column ,它以不可见的方式处理所有这些,您可以轻松地将其添加到现有表中:

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

关于sql - PostgreSQL 列类型从 bigint 到 bigserial 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31965506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com