IBCOURSES / СПРАВОЧНИК ИБ

PostgreSQL 23505: нарушена уникальность

К ответу ↓

Операция нарушила ограничение уникальности. Для диагностики нужны имя ограничения, объект и контекст транзакции; ошибка сама по себе не определяет проблему генератора ID или атаку.

Например
Материалов с пояснениями: 94 · Записей реестров: 11 678

Уточнить поиск

Коды и ошибки

Найдено: 195
Инструкция по проверке

PostgreSQL 23505: нарушена уникальность

Операция нарушила ограничение уникальности. Для диагностики нужны имя ограничения, объект и контекст транзакции; ошибка сама по себе не определяет проблему генератора ID или атаку.

1. Закрепите экземпляр и формат

Запишите PostgreSQL major, экземпляр, базу, период и приложение, получившее ошибку. 23505 — SQLSTATE unique_violation, а не номер запроса или общий код любой СУБД. Здесь область применения PostgreSQL 18. Сначала определите вид источника: клиентский ответ, text log, CSV или jsonlog. Имена полей этих представлений нельзя подменять друг другом.

2. Найдите исходное сообщение

В JSON-копии используйте отбор по строковому state_code=23505. Сохраните всю запись и соседние сообщения того же сеанса, а не только локализованный текст из приложения. Если текст statement/detail содержит реальные значения, обращайтесь с копией по правилам доступа к данным. Команда читает уже полученный файл и не пытается повторить INSERT/UPDATE в базе.

3. Прочитайте учебный фрагмент

В примере сообщение указывает demo_pkey. Это вымышленное имя ограничения и сокращённый JSON, где опущены база, сеанс и statement. Из него нельзя установить пользователя или всю операцию. Не предполагайте по окончанию_pkey, какие столбцы входят в ключ реальной таблицы. Объект, его схема и определение должны быть найдены в соответствующем экземпляре отдельно.

4. Установите условие конфликта

Проверьте фактическое ограничение уникальности и набор сравниваемых значений, если они доступны. Ошибка может относиться к одному столбцу либо комбинации, а прикладная операция может состоять из нескольких statements. Не снимайте ограничение и не удаляйте конфликтующую строку как диагностический шаг. Сначала выясните, корректно ли приложение сформировало ключ и не выполнялось ли повторное действие.

5. Проверьте итог транзакции

Сопоставьте серверный сеанс с request ID приложения и границами транзакции. Отказ одного statement не описывает автоматически все предыдущие и последующие действия: возможны явный rollback, savepoint или новая попытка. Текущее наличие строки тоже не доказывает, кто создал её в прошлом. В выводе разделите нарушенное условие, исследуемый запрос и подтверждённый итог пользовательской операции.

6. Если запись не найдена

Проверьте формат и правильное имя JSON-поля, экземпляр, период, ротацию и действовавший уровень регистрации. Приложение могло сохранить SQLSTATE без полного серверного текста. Тогда используйте доступную ошибку как начало цепочки, сохраняя невозможность атрибуции или восстановления значений. Отсутствие 23505 в одном файле не доказывает отсутствие конфликтов во всех соединениях и репликах.

Поля и область применения

Исходное полеСмысл и ограничения
SQLSTATE / state_codeСтрока 23505.
constraint / detailИмя и значения, если сервер их сообщил.
statement / sessionКонтекст операции.
transaction outcomeПоследующий исход проверяется отдельно.

Примеры записей

Данные в примерах условные. Состав полей зависит от версии и настроек источника.

Пример фрагмента записи

Фрагмент журнала. Сокращённая схема для объяснения полей.

{
  "state_code": "23505",
  "message": "duplicate key value violates unique constraint \"demo_pkey\""
}

Команды и способы проверки

Укажите свой узел, путь к журналу и временной интервал. Требуемая среда указана рядом с командой.

jq 1.8 · копия jsonlog

jq 'select(.state_code == "23505")' postgresql.json

Первоисточники

Не следует удалять существующие данные или отключать constraint по одному сообщению.

Связанные материалы

Как пользоваться техническим справочником

Найдите порт, код ошибки, событие или источник журнала. Уточните протокол и систему, затем сверяйте значение, поля, примеры и первоисточники. Назначение порта не определяет фактическую службу, а одна запись не доказывает инцидент.

Материалы по разделам

События и журналы

Два ответа рядом

Сравнение источников

Сравнение показывает различия. События и поля разных систем не считаются эквивалентными.

Выберите службу

В списке — службы, доступные с текущими условиями. Число рядом — количество записей портов, а не программ на вашем узле.

Как искать в справочнике

Введите число, код, фрагмент сообщения или вопрос. Известный идентификатор поможет найти карточку; это не анализ самого инцидента.

  1. Введите номер, код, имя или фрагмент записи. Для портов можно использовать список: 80, 443, 8000–8010.
  2. Уточните поиск фильтрами. Все условия действуют одновременно. Числа в списках показывают, сколько материалов останется при выборе варианта.
  3. Службу выбирайте из каталога: поиск внутри списка помогает найти название, а кнопка «Выбрать» применяет его.
  4. Убирайте отдельные условия кнопкой × рядом с фильтром. «Сбросить фильтры» сохраняет текст поиска и текущий раздел.
  5. В карточке сверьте источник, версию и условия регистрации, затем откройте поля, примеры и первоисточник.

/ — перейти к поиску. Прямые ссылки открывают выбранную карточку в этом же справочнике.

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

Избранное и недавние материалы хранятся в этом браузере. Запрос и фильтры сохраняются при возврате к выдаче и обновлении вкладки. Поиск работает локально.

Что есть в справочнике

От вопроса к свидетельствам: кто вошёл, что запустил, к каким данным обратился, что изменил и где искать следы.

Выберите область, чтобы посмотреть доступные источники и перейти к материалам.

Уточнить или исправить ответ

Скопируйте сообщение и отправьте его на mail@ibcourses.ru.