如何将主键从整数转换为串行?

时间:2014-12-05 02:34:21

标签: 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

1 个答案:

答案 0 :(得分:13)

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

  1. 创建一个序列(默认情况下具有匹配的名称)。
  2. 设置列NOT NULL,默认为从该序列中绘制。
  3. 使列“拥有”序列。
  4. 详细说明:

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

    要将bigint“更改为”bigserialinteger改为serial,您只需手动完成其余工作:

    实际数据类型仍为integer / bigint。如果符合serial的所有条件,pgAdmin等客户将在反向工程CREATE TABLE脚本中显示数据类型serial