postgresql - 如何将主键从整数转换为序列?

标签 postgresql types auto-increment ddl postgresql-9.3

在 Postgres 9.3 表中,我有一个 integer 作为主键并自动递增,但我已经达到 integer 的最大值。如何将它从integer转换为serial
我试过:

ALTER TABLE my_table ALTER COLUMN id SET DATA TYPE bigint;

但同样不适用于数据类型 serial 而不是 bigint。好像我无法转换为 serial

最佳答案

serial是一种数据类型,而不是实际的数据类型。它是一个 integer,下面有一些自动执行的额外 DDL 命令:

  1. 创建一个 SEQUENCE(默认具有匹配的名称)。
  2. 设置列 NOT NULL 并默认从该序列中提取。
  3. 使列“拥有”序列。

详细信息:

A bigserial是一样的,围绕 bigint 列构建。您想要 bigint,但您已经实现了。要将现有的 serial 列转换为 bigserial(或 smallserial),您需要做的就是ALTER列的数据类型。序列一般基于bigint,因此相同的序列可以用于任何integer类型。

要将 bigint“更改”为 bigserial 或将 integer 更改为 serial,您只需手动完成剩下的工作:

实际的数据类型还是integer/bigint。如果满足 serial 的所有条件,一些客户端(如 pgAdmin)将在反向工程 CREATE TABLE 脚本中显示数据类型 serial。 p>

关于postgresql - 如何将主键从整数转换为序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307835/

相关文章:

java - Instanceof - 从先前的 ArrayList 添加新对象到新的 ArrayList

haskell - 为什么在Num中没有定义(/)时编译 "1/2"?

MySQL - 自动递增 10

mysql重启自动int主键

linux - 从源安装软件

postgresql - 如何按 A a-Z z- 符号排序

sql - 索引分区表的查询计划。避免顺序扫描

sql - Rails postgres 按自定义顺序

c++ - 错误 : classname does not name a type

mysql - OpenJPA 和 MySQL 自动增量