SERIAL
на самом деле не тип; как объясняется в 9.5 документах , это просто сокращение для набора команд:
Типы данных smallserial
, serial
и bigserial
не являются истинными типами, а просто удобством нотации [...] В текущей реализации указывается:
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;
Как видите, тип integer
применяется только к столбцу таблицы и не упоминается в определении последовательности. Оператор CREATE SEQUENCE
в 9.5 не позволяет вам указывать тип; все последовательности основаны на счетчиках bigint
, следовательно, столбцы bigint
в вашем выводе \d+
.
Это больше не относится к Postgres 10: теперь вы можете присоединить тип данных к последовательности, и согласно новым документам , последовательность в примере SERIAL
выше теперь определяется как:
CREATE SEQUENCE tablename_colname_seq AS integer;
Это действительно только для ограничения максимального значения последовательности - внутренний счетчик по-прежнему равен bigint
- но он сообщается как соответствующий тип \d+
(который теперь выглядит совсем иначе):
test=# \d+ tablename_colname_seq
Sequence "public.tablename_colname_seq"
Type | Start | Minimum | Maximum | Increment | Cycles? | Cache
---------+-------+---------+------------+-----------+---------+-------
integer | 1 | 1 | 2147483647 | 1 | no | 1