在PostgreSQL中使用哪种数据类型来引用SERIAL数据类型?

问题描述 投票:0回答:1

我在PostgreSQL中有两个表。第一个应该有一个自动递增ID字段,第二个引用:

CREATE TABLE tableA (id SERIAL NOT NULL PRIMARY KEY, ...)
CREATE TABLE tableB (parent INTEGER NOT NULL REFERENCES tableA(id), ...)

根据documentationSERIAL作为无符号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),并不是那么重要,但对我来说,签名整数引用似乎有点不洁净未签名的。我相信一定有更好的方法 - 我错过了什么吗?

postgresql
1个回答
4
投票

serial是一个整数,它不是“无符号”。自动创建的序列恰好从1开始 - 这就是全部。列的数据类型仍然是integer(如果您愿意,可以使序列从-2147483648开始)。

Quote from the manual

CREATE TABLE tablename (
    colname SERIAL
);

相当于

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;

(强调我的)

© www.soinside.com 2019 - 2024. All rights reserved.