在PostgreSQL数据库中,唯一键的正确数据类型是什么?

38

在PostgreSQL数据库中的表中,如果要为唯一键(例如用户ID)选择数据类型,应该选择哪种数据类型?
是bigint吗?

谢谢

3个回答

51

使用 serial 类型来自动递增唯一标识。

如果你计划有超过20亿个条目,请使用 bigserialserial 是 PostgresSQL 中与 MySQL 的 AUTO_INCREMENT 相当的功能。

PostgresSQL 文档: 数值类型


5
我建议不要这样做:如果您使用“串行号”,并通过API公开此ID,那么您就会让任何试图从您的网站上抓取数据的人变得非常容易。 - Peter Knego
2
如果数据的安全性取决于主键的数据类型,那么我们就有一个更大的问题。@PeterKnego - Rohit Naik
@RohitNaik 有时候你会有公共数据,但你仍然不想允许在你的网站上爬取所有数据。例如图片或公共用户资料。此外,我的建议不是关于数据类型,而是反对以可以轻易被发现的方式连续生成标识符。 - Peter Knego

7

bigint(如果需要自动增长键,则为bigserial)非常好。

如果您确信不会加载太多行,则可以考虑使用integer(或常规serial),并可能节省一些硬盘空间。


...还有一些处理能力,至少在32位系统中。 - Rodrigo
如果您计划有大量数据或者可能会有 - 请使用最大可用的数据类型。有时在真实的系统/应用程序中会出现基本int已用尽的情况。 - jave.web

3
根据这个答案,目前推荐的自增唯一ID的方法是使用generated as identity语法而不是serial

以下是一个例子:

-- the old way
create table t1 (id serial primary key);

-- the new way
create table t2 (id integer primary key generated always as identity);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接