In Postgres 9.6 или ранее, последовательность, созданная столбцом serial
, уже возвращает bigint
. Вы можете проверить это, используя psql :
drop table if exists my_table;
create table my_table(id serial primary key, str text);
\d my_table
Table "public.my_table"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+--------------------------------------
id | integer | | not null | nextval('my_table_id_seq'::regclass)
str | text | | |
Indexes:
"my_table_pkey" PRIMARY KEY, btree (id)
\d my_table_id_seq
Sequence "public.my_table_id_seq"
Type | Start | Minimum | Maximum | Increment | Cycles? | Cache
--------+-------+---------+---------------------+-----------+---------+-------
bigint | 1 | 1 | 9223372036854775807 | 1 | no | 1
Owned by: public.my_table.id
Таким образом, вам следует изменить только тип последовательного столбца:
alter table my_table alter id type bigint;
Поведение изменилось в Postgres 10 :
Кроме того, последовательности, созданные для столбцов SERIAL, теперь генерируют положительные 32-битные значения, тогда как предыдущие версии генерировали 64-битные значения. Это не имеет видимого эффекта, если значения хранятся только в столбце.
Следовательно в Postgres 10 +:
alter sequence my_table_id_seq as bigint;
alter table my_table alter id type bigint;