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

joh*_*odo 2 postgresql

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

CREATE TABLE tableA (id SERIAL NOT NULL PRIMARY KEY, ...)
CREATE TABLE tableB (parent INTEGER NOT NULL REFERENCES tableA(id), ...)
Run Code Online (Sandbox Code Playgroud)

根据文档SERIAL在签名时充当无符号4字节整数INTEGER

serial      4 bytes     autoincrementing integer    1 to 2147483647
integer     4 bytes     typical choice for integer  -2147483648 to +2147483647
Run Code Online (Sandbox Code Playgroud)

如果我正确理解,我使用的数据类型不兼容,但是PostgreSQL显然缺少无符号整数。我知道我可能不会使用超过2 * 10 ^ 9个ID(如果我这样做了,我总是可以使用BIGSERIAL),这并不是那么重要,但是对我来说,带符号整数引用一个无符号似乎有点不干净一。我确信必须有一个更好的方法-我错过了什么吗?

a_h*_*ame 5

A serial 一个整数,并且不是“无符号”。自动创建的序列恰好从1开始-仅此而已。列的数据类型仍然是integer(如果需要,您可以使序列从-2147483648开始)。

引用手册

CREATE TABLE tablename (
    colname SERIAL
);
Run Code Online (Sandbox Code Playgroud)

等同

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;
Run Code Online (Sandbox Code Playgroud)

(强调我的)