Тип данных идентификатора первичного ключа PostgreSQL от последовательного к большому? - PullRequest
0 голосов
/ 06 сентября 2018

Я провел некоторое исследование, но не могу найти точный ответ, который ищу. В настоящее время у меня есть столбец первичного ключа 'id', для которого задано значение serial, но я хочу изменить его на bigserial для сопоставления с Long на уровне Java. Каков наилучший способ добиться этого, учитывая, что это существующая таблица? Я думаю, что моя версия Postgres 10.5. Также я знаю, что и последовательный, и большой сериал не являются типом данных.

1 Ответ

0 голосов
/ 06 сентября 2018

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...