Подтвердить что ты не робот

Изменение типа данных столбца на последовательный

В pgsql существует ли способ иметь таблицу из нескольких значений и выбрать один из них (скажем, other_id), узнать, каково его наивысшее значение, и сделать каждую новую запись, которая помещается в приращение таблицы из этого значение.

Я полагаю, это было слишком просто, чтобы иметь возможность работать.

ALTER TABLE address ALTER COLUMN new_id TYPE SERIAL

____________________________________ 
ERROR:  type "serial" does not exist

Спасибо за понимание!

4b9b3361

Ответ 1

Быстрый взгляд на docs сообщает, что

Типы данных smallserial, serial и bigserial не являются истинными типамиа просто удобством для создания уникальных столбцов идентификаторов

Если вы хотите, чтобы существующий (целочисленный) столбец работал как "последовательный", просто создайте последовательность вручную (имя произвольное), установите его текущее значение максимально (или больше) вашего текущего address.new_id, установите его как значение по умолчанию для столбца address.new_id.

Чтобы установить значение вашей последовательности, см. здесь.

SELECT setval('address_new_id_seq', 10000);

Это просто пример, используйте свое собственное имя последовательности (произвольное, вы его создаете), а число больше максимального значения текущего столбца.


Обновление: как указано в ответе Лукаса (который должен быть воспринятым), вы также должны указать, в какой столбец последовательность "принадлежит", используя CREATE/ALTER SEQUENCE ... OWNED BY ...

Ответ 2

Посмотрите в документацию postgresql тип данных. Серийный номер - только короткая рука.

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;