【发布时间】:2018-06-11 16:49:08
【问题描述】:
我在 PostgreSQL 中有两个表。第一个应该有一个自动递增的 ID 字段,第二个引用:
CREATE TABLE tableA (id SERIAL NOT NULL PRIMARY KEY, ...)
CREATE TABLE tableB (parent INTEGER NOT NULL REFERENCES tableA(id), ...)
根据documentation,SERIAL 充当无符号 4 字节整数,而 INTEGER 是有符号的:
serial 4 bytes autoincrementing integer 1 to 2147483647
integer 4 bytes typical choice for integer -2147483648 to +2147483647
如果我理解正确的话,我使用的数据类型不兼容,但PostgreSQL显然lacks unsigned integers。我知道我可能不会使用超过 2*10^9 个 ID(如果我这样做了,我总是可以使用 BIGSERIAL),这并不是那么重要,但对我来说,有符号整数似乎有点不干净引用一个未签名的。我确信一定有更好的方法 - 我错过了什么吗?
【问题讨论】:
-
有一个处理无符号整数的扩展:github.com/petere/pguint - 它是从您链接的问题中引用的。
-
是的,我知道,谢谢 - 但是如果 PostgreSQL 支持无符号整数,我会更喜欢它,但它对我来说并不重要。在我的情况下,为此使用扩展似乎有点过头了(我不知道扩展代码的成熟度,它会引入额外的部署约束,可能会导致未来与核心 psql 等的兼容性问题)。
标签: postgresql