#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. Я понял. Спасибо