PostgreSQL LinuxWindowsсервер PostgreSQL

PostgreSQL: При восстановлении схемы конфликтуют имена последовательностей

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

При восстановлении схемы PostgreSQL возникает ошибка о существующей последовательности или занятости имени: объект уже создан, дамп содержит повторное создание либо восстанавливается поверх неочищенной схемы. Нужно сопоставить состав дампа и работающие значения, не удаляя объекты вслепую.

В этой статье
  1. Симптом и границы применимости
  2. Как отличить возможные причины
  3. Пошаговая диагностика и безопасное исправление
  4. Как проверить, что проблема устранена
  5. Если исправление не помогло

#Симптом и границы применимости

При восстановлении схемы PostgreSQL возникает ошибка о существующей последовательности или занятости имени: объект уже создан, дамп содержит повторное создание либо восстанавливается поверх неочищенной схемы. Нужно сопоставить состав дампа и работающие значения, не удаляя объекты вслепую.

#Как отличить возможные причины

Возможная причинаКак узнатьЧто делать
Схема уже содержит sequenceПовторный restore пытается создать одноимённый объект.relation ... already existsВосстанавливать в чистый тестовый кластер
Ручное создание пересеклось с дампомВ миграции использовано то же имя последовательности, что и в дампе.Ошибка CREATE SEQUENCEСогласовать имена и ownership
Уже загружены данныеПоследовательность осталась с меньшим значением, чем существующие id.duplicate key при последующей вставкеПроверить sequence после восстановления

#Пошаговая диагностика и безопасное исправление

  1. 1. Сохраните точное имя конфликта и командуВ журнале pg_restore найдите первую ошибку, тип объекта SEQUENCE и её схему. Сохраните только обезличенный контекст; последующие ошибки могут быть следствием первой.
  1. 2. Проверьте, куда направлено восстановлениеВ psql убедитесь в current_database и current_schema, а также отсутствии пользовательских изменений в выбранной тестовой базе. Не применяйте --clean к действующей базе: он удаляет объекты перед созданием.
  1. 3. Посмотрите последовательности до измененияВ системном представлении pg_sequences найдите имя объекта и его схему. Если объект уже используется приложением, считайте это конфликтом развёртывания, а не мусором.
  2. psql, чтение; пример для последовательностей заказов
    SQLКоманда
    psql, чтение; пример для последовательностей заказов.
    SELECT schemaname, sequencename, start_value, increment_by FROM pg_sequences WHERE sequencename LIKE 'orders%';
  1. 4. Проверьте привязку serial/identity к столбцуЕсли объект нужен столбцу ID, спросите PostgreSQL о его последовательности. Отсутствие результата может означать независимую последовательность или другую схему.
  2. psql, чтение; таблица и столбец — пример
    SQLКоманда
    psql, чтение; таблица и столбец — пример.
    SELECT pg_get_serial_sequence('app.orders','id');
  1. 5. Посмотрите содержимое архива pg_dumpДля custom-дампа в терминале клиента выполните pg_restore -l и найдите записи SEQUENCE, SEQUENCE OWNED BY и SEQUENCE SET. Не изменяйте архив исходного резервного копирования.
    Linux · Терминал (Bash)Команда
    Терминал с pg_restore; только чтение структуры архива формата custom/tar/directory, не SQL plain.
    pg_restore -l ./backup.dump > ./toc.txt
  1. 6. Прогоните восстановление в отдельную пустую базуСоздайте новый тестовый кластер или базу и исполните восстановление по официальной процедуре; дубли имени в чистой схеме означают дефект дампа/миграции, а не конфликт старых данных.
  1. 7. Проверьте значения ID и привязкиПосле успешного восстановления вставьте тестовую запись в отдельную копию данных и проверьте выдачу очередного ID. Не увеличивайте setval до максимума, не выяснив, кто и когда генерирует ID; пустые таблицы требуют осторожного обращения.
  1. 8. Согласуйте стратегию миграцииЕсли требуется частичное восстановление поверх действующей базы, составьте явный список переносимых объектов, сохраните снимок и порядок действий. Не запускайте CASCADE DROP SEQUENCE ради одного конфликта.

#Как проверить, что проблема устранена

В чистой тестовой базе нет конфликтов имени последовательности, столбцы используют нужные генераторы, новые тестовые строки получают уникальные ID.

#Если исправление не помогло

Если ошибка сохраняется даже в пустой схеме, проверьте, не запускает ли приложение параллельные миграции и не создаёт ли последовательность отдельный SQL-скрипт.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.