在Postgres 9.3表中,我有integer
作为主键,自动序列递增,但我已达到integer
的最大值。如何将其从integer
转换为serial
?
我试过了:
ALTER TABLE my_table ALTER COLUMN id SET DATA TYPE bigint;
但这同样适用于数据类型serial
而不是bigint
。好像我无法转换为serial
?
答案 0 :(得分:13)
serial
是 伪 数据类型,而不是实际数据类型。它是一个integer
下面的一些额外的DDL命令自动执行:
NOT NULL
,默认为从该序列中绘制。详细说明:
bigserial
是相同的,围绕bigint
列构建。你想要bigint
,但你已经实现了。要将现有serial
列转换为bigserial
(或smallserial
),您只需要ALTER
列的数据类型。序列通常基于bigint
,因此相同的序列可用于任何integer
类型。
要将bigint
“更改为”bigserial
或integer
改为serial
,您只需手动完成其余工作:
实际数据类型仍为integer
/ bigint
。如果符合serial
的所有条件,pgAdmin等客户将在反向工程CREATE TABLE
脚本中显示数据类型serial
。