我在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
),并不是那么重要,但对我来说,签名整数引用似乎有点不洁净未签名的。我相信一定有更好的方法 - 我错过了什么吗?
serial
是一个整数,它不是“无符号”。自动创建的序列恰好从1开始 - 这就是全部。列的数据类型仍然是integer
(如果您愿意,可以使序列从-2147483648开始)。
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;
(强调我的)