gpt4 book ai didi

从 serial 到 bigserial 的 PostgreSQL 主键 id 数据类型?

转载 作者:行者123 更新时间:2023-11-29 14:15:00 27 4
gpt4 key购买 nike

我做了一些研究,但找不到我想要的确切答案。目前我有一个设置为串行的主键列“id”,但我想将其更改为 bigserial 以映射到 Java 层中的 Long。考虑到这是一个现有表,实现此目标的最佳方法是什么?我想我的 Postgres 版本是 10.5。我也知道 serial 和 bigserial 都不是数据类型。

最佳答案

Postgres 9.6 或更早版本中,由 serial 列创建的序列已经返回 bigint。您可以使用 psql 进行检查:

drop table if exists my_table;
create table my_table(id serial primary key, str text);

\d my_table

Table "public.my_table"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+--------------------------------------
id | integer | | not null | nextval('my_table_id_seq'::regclass)
str | text | | |
Indexes:
"my_table_pkey" PRIMARY KEY, btree (id)


\d my_table_id_seq

Sequence "public.my_table_id_seq"
Type | Start | Minimum | Maximum | Increment | Cycles? | Cache
--------+-------+---------+---------------------+-----------+---------+-------
bigint | 1 | 1 | 9223372036854775807 | 1 | no | 1
Owned by: public.my_table.id

所以你应该只改变序列列的类型:

alter table my_table alter id type bigint;

行为 has changedPostgres 10 中:

Also, sequences created for SERIAL columns now generate positive 32-bit wide values, whereas previous versions generated 64-bit wide values. This has no visible effect if the values are only stored in a column.

因此在 Postgres 10+ 中:

alter sequence my_table_id_seq as bigint;
alter table my_table alter id type bigint;

关于从 serial 到 bigserial 的 PostgreSQL 主键 id 数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52195303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com