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

Dam*_*mir 7 postgresql ddl types auto-increment postgresql-9.3

在Postgres 9.3表中,我有一个integer主键,自动序列递增,但我达到了最大值integer.如何将其转换integerserial
我试过了:

ALTER TABLE my_table ALTER COLUMN id SET DATA TYPE bigint;
Run Code Online (Sandbox Code Playgroud)

但是相同的数据类型不适serial用于bigint.好像我无法转换为serial

Erw*_*ter 14

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

  1. 创建一个序列(默认情况下具有匹配的名称).
  2. 设置列NOT NULL和默认值以从该序列中绘制.
  3. 使列"拥有"序列.

细节:

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

要将a"变" bigint成a bigserialinteger变成a serial,你只需要手工完成剩下的工作:

实际数据类型仍为integer/ bigint.如果满足a的所有条件,某些客户端(如pgAdmin)将serial在反向工程CREATE TABLE脚本中显示数据类型serial.