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