Сброс столбца идентификаторов с последним значением идентификатора таблицы в postgres

#postgresql #database-sequence

#postgresql #database-последовательность

Вопрос:

Я хотел бы изменить существующий столбец как автоматическую идентификацию в базе данных Postgres.
Я использовал приведенный ниже скрипт для установки столбца автоматической идентификации и установки по умолчанию, начинающегося с 1.
Но здесь я хотел бы сбросить значение столбца идентификатора до последнего значения таблицы.
Дайте мне знать, если у вас есть какие-либо решения.

 ALTER TABLE patient 
    ALTER patientid SET NOT NULL,
    ALTER patientid ADD GENERATED ALWAYS AS IDENTITY (START WITH 1);
 

Здесь я настраиваю что-то вроде этого:

  ALTER TABLE Patient 
   ALTER COLUMN PatientId RESTART WITH (select Max(patientId)   1 from patient);
 

Ответ №1:

Идентификационные столбцы также поддерживаются последовательностью и pg_get_serial_sequence() возвращают это имя последовательности. Это можно использовать вместе с setval() .

После выполнения add generated always части вы можете настроить последовательность, используя этот оператор:

 SELECT setval(pg_get_serial_sequence('patient', 'patientid'), 
                                      (select max(patientid) from patient));
 

Комментарии:

1. Это решение я уже знаю. но я не хочу использовать serial. здесь я хотел бы использовать идентификатор, как описано в вопросе.

2. @NayanRudani: как я уже писал в своем ответе: identity столбец также использует последовательность. Приведенный выше код будет работать и для identity столбцов.

3. Я понял. Спасибо