在 Postgres 9.3 表中,我有一个 integer
作为主键并自动递增,但我已经达到 integer
的最大值。如何将它从integer
转换为serial
?
我试过:
ALTER TABLE my_table ALTER COLUMN id SET DATA TYPE bigint;
但同样不适用于数据类型 serial
而不是 bigint
。好像我无法转换为 serial
?
最佳答案
serial
是一种伪数据类型,而不是实际的数据类型。它是一个 integer
,下面有一些自动执行的额外 DDL 命令:
- 创建一个
SEQUENCE
(默认具有匹配的名称)。 - 设置列
NOT NULL
并默认从该序列中提取。 - 使列“拥有”序列。
详细信息:
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/