sql - 为什么 PostgreSQL 不使用无符号整数作为 ID?这不是会提供两倍的可能记录吗?

标签 sql postgresql int

根据this documentation , PostgreSQL 不支持无符号整数。

虽然我知道它使类型解析系统变得不那么复杂,但我不明白这对于自动递增 ID 来说有何实际意义。

添加无符号整数作为自动增量 ID 不会导致使用常规 int 的可能记录数量增长两倍吗? (4294967296 而不是 2147483648)

我知道它只意味着 1 位之间的差异,但它仍然是您目前永远不会使用的位。

谢谢!

最佳答案

按照惯例,ID 是从 1 开始的正整数(据我所知,标准并未强制执行这一点,但如果确实如此,也不会感到完全惊讶)。 PostgreSQL serial 数据类型实现了此约定,并且值也是“自动生成的”。

如果您确实希望实现自己的方法,可以这样做:

create sequence epictable_seq
    MINVALUE -2147483648 
    start -2147483648 
    increment 1
    NO MAXVALUE
    CACHE 1;
CREATE TABLE epictable
(
    mytable_key    INT unique not null,
    moobars        VARCHAR(40) not null,
    foobars        DATE
);
insert into epictable(mytable_key, moobars,foobars) 
values
  (nextval('epictable_seq'),'delicious moobars','2012-05-01')
, (nextval('epictable_seq'),'worldwide interblag','2012-05-02')
;
2 rows affected
select * 
from epictable
;
mytable_key | moobars             | foobars   
----------: | :------------------ | :---------
-2147483648 | delicious moobars   | 2012-05-01
-2147483647 | worldwide interblag | 2012-05-02

db<> fiddle here

另请参阅this former answer

关于sql - 为什么 PostgreSQL 不使用无符号整数作为 ID?这不是会提供两倍的可能记录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54337193/

相关文章:

c# - SubmitChanges 立即取回记录

mysql - SQL 全连接语法错误

regex - 如何预编译正则表达式?

matlab - mex 文件输出的 int 数组

Java Android : result in the calculator displays integers(need float/double)

php - SQL-如果不为空,则选择不同表中的列

sql - 如何删除 '2002' 和 '2006' 之间的特定键?

postgresql - 使用来自 VALUES 表达式的输入更新列,无需显式类型转换

sql - 用另一个表中的相关值替换数组列中的值

java - 将 String 数组转换为 int 数组时出错