Рейтинг:0

Невозможно добавить нового пользователя из-за ошибки «Нарушение ограничения целостности: повторяющаяся запись».

флаг in

Начиная с 14 декабря 2021 г., мой сайт начал создавать пользователей с низкими идентификаторами пользователей, несмотря на то, что самый часто используемый идентификатор пользователя был 9317. Я мысль что-то было изменено в основном обновлении для повторного использования идентификаторов, которые были освобождены путем отмены учетной записи пользователя. Однако я обнаружил, что с этой даты сайт пытается повторно использовать каждый идентификатор, начинающийся с 1.Мой журнал ошибок заполнен такими ошибками:

Drupal\Core\Entity\EntityStorageException: SQLSTATE[23000]: нарушение ограничения целостности:
1062 Дублирующаяся запись «281» для ключа «users.PRIMARY»: ВСТАВИТЬ В «users» («uuid», «langcode»)
ЗНАЧЕНИЯ (:db_insert_placeholder_0, :db_insert_placeholder_1); Множество (
[:db_insert_placeholder_0] => 5ff1347c-439f-437e-ba3f-762f7350fda3
[:db_insert_placeholder_1] => en ) в Drupal\Core\Entity\Sql\SqlContentEntityStorage->save()
(строка 811 файла /home/drupal/webroot/rsc.byu.edu/web/core/lib/Drupal/Core/Entity/
Sql/SqlContentEntityStorage.php).

В приведенном выше примере говорится Повторяющаяся запись "381". Следующая ошибка скажет Повторяющаяся запись "382" и так далее.

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

Рейтинг:3
флаг in

После долгих поисков я заметил в резервной копии до 14 декабря 2021 г. пользователи Таблица жидкость поле было определено как Атрибуты: UNSIGNED. СЕЙЧАС (18 февраля 2022 г.) жидкость поле определяется как Атрибуты: ничего и дополнительно: AUTO_INCREMENT. AUTO_INCREMENT является новым.

Это привело меня к тестированию с резервной копией моего сайта. Конечно же, до 14 декабря 2021 г. каждый раз, когда я добавляю пользователя, значение в последовательности таблица увеличивается. На обновленном сайте этого больше не происходит. Вместо этого происходит сбой, как описано выше.

Решение состояло в том, чтобы запустить следующий запрос в базе данных:

ALTER TABLE пользователей AUTO_INCREMENT = 3918; # самый высокий существующий идентификатор был 3917

Это решило проблему.Я предполагаю, что в основном обновлении, установленном 14 декабря 2021 г., код был изменен с использования последовательности таблицы для использования AUTO_INCREMENT на жидкость поле в пользователи таблице и что каким-то образом мне не удалось выполнить обновление базы данных, которое правильно установило бы значение AUTO_INCREMENT в пользователи стол, чтобы избежать этого беспорядка.

Я надеюсь, что этот отчет о моей боли поможет кому-то.

Rod avatar
флаг tr
Rod
После обновления до Drupal 9.3.12 на сайте нельзя было создавать новых пользователей. Сообщение об ошибке, которое я получил при попытке добавить пользователя либо через сайт, либо через drush, было следующим: «SQLSTATE [23000]: нарушение ограничения целостности: 1062 Дублирующаяся запись «220» для ключа «users.PRIMARY…». Ваш запрос ALTER TABLE спас день и устранил проблему для меня. Спасибо Маршалл!

Ответить или комментировать

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