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

时间:2018-01-01 21:01:23

标签: postgresql

我在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),并且它并不是那么重要,但它似乎是对我来说有点不洁,有一个无符号的整数引用。我相信一定有更好的方法 - 我错过了什么吗?

1 个答案:

答案 0 :(得分: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;

(强调我的)