Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PG_23505 1С:Предприятие и СУБД

PostgreSQL Error 23505: unique_violation — дублирование первичных ключей

Обновлено: 25.08.2026 · Официальная документация ↗
  • Ошибка выполнения: ERROR: duplicate key value violates unique constraint "table_pkey" (SQLSTATE 23505). Detail: Key (id)=(105) already exists.
  • Сбой вставки новых записей в таблицы со счетчиками автоинкремента (IDENTITY / SEQUENCE).
  • Нарушение уникальности номеров документов или кодов справочников в 1С.

1. Поиск дублирующихся значений

SELECT id, count(*)
FROM my_table
GROUP BY id
HAVING count(*) > 1;

2. Синхронизация последовательности (Sequence) с максимальным ID

Частая причина ошибки — рассинхронизация счетчика после ручной вставки или импорта данных:

-- Перевод счетчика последовательности на актуальное максимальное значение
SELECT setval(
    pg_get_serial_sequence('my_table', 'id'),
    COALESCE(MAX(id), 1)
) FROM my_table;

3. Использование конструкции UPSERT (ON CONFLICT)

Для бесконфликтной параллельной вставки используйте синтаксис ON CONFLICT:

INSERT INTO user_settings (user_id, theme)
VALUES (42, 'dark')
ON CONFLICT (user_id) 
DO UPDATE SET theme = EXCLUDED.theme;

4. Перестроение поврежденного уникального индекса

При повреждении страниц b-tree индекса выполните перестроение без блокировки чтения:

REINDEX INDEX CONCURRENTLY table_pkey;
💡 Практика специалистов: Если ошибка 23505 возникает на уникальном индексе, но дубликата в таблице физически нет, это явный симптом повреждения индекса (Index Corruption). Выполните REINDEX TABLE.

Частые вопросы (FAQ)

Почему sequence в PostgreSQL начинает возвращать уже существующие ID?

Это происходит, если в таблицу вставлялись строки с явным указанием ID (INSERT INTO ... VALUES (105, ...)) в обход вызова nextval(), либо после некорректного восстановления данных из бэкапа.

Как исправить ошибку нарушения уникальности в базе 1С:Предприятие?

Запустите процедуру 'Тестирование и исправление информационной базы' в Конфигураторе с установленным флагом 'Проверка логической и ссылочной целостности'.

Можно ли временно отключить проверку Unique Constraint?

Нет, уникальные ограничения в PostgreSQL проверяются строго в момент фиксации строки или транзакции (если ограничение создано как DEFERRABLE).

Как перестроить сразу все последовательности в схеме?

Используйте PL/pgSQL скрипт, обходящий все объекты информационной схемы и вызывающий setval() для каждого генератора.

Полезные материалы
Рекомендуем