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

31 浏览
0 Comments

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

在Postgres 9.3表中,我有一个自动递增的整数作为主键,但是我已经达到了整数的最大值。如何将其从整数转换为序列?

我尝试过:

ALTER TABLE my_table ALTER COLUMN id SET DATA TYPE bigint;

但是在数据类型为bigint而不是serial的情况下,相同的方法不起作用。似乎我无法转换为serial类型?

0
0 Comments

在PostgreSQL中,serial是一个伪数据类型,而不是实际的数据类型。它实际上是一个基于integer的数据类型,会自动执行一些额外的DDL命令:

1. 创建一个序列(默认情况下与列名相匹配)。

2. 将列设置为NOT NULL,并将默认值设置为从该序列获取。

3. 使列"拥有"该序列。

如果要将现有的serial列转换为bigserial(或smallserial),你只需要ALTER列的数据类型。序列通常基于bigint,因此可以为任何integer类型使用相同的序列。

要将bigint更改为bigserial或将integer更改为serial,只需手动完成其余步骤。

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

解决方法:

- 如果要将现有的serial列转换为bigserialsmallserial,只需执行以下操作:ALTER列的数据类型即可。

- 如果要将bigintinteger更改为bigserialserial,可以手动完成剩余的步骤。可以参考相关的Stack Overflow链接获取更多详细信息。

0