Рейтинг:0

Ошибка SQL при попытке удалить поле типа контента

флаг np

Я пытался создать новый тип контента для своего сайта и выбрал имя поля («описание»), которое уже использовалось для других типов контента.

Проблема возникла при сохранении изменений, так как имя компьютера для поля уже существует для полей в других типах контента, но с другим типом поля. В других типах содержимого я использовал тип поля «Длинный текст» по умолчанию, но в этом случае я выбрал поле «Подробнее», так как оно лучше подходит для моего варианта использования.

Я заметил проблему и вернулся, чтобы изменить имя машины, но обнаружил, что создал два поля, и в одном из них было имя машины с проблемой, о которой я упоминал ранее.

При попытке удалить такое поле я перешел к admin/структура/типы/управление/my_custom_content_type/поля и с помощью параметров пользовательского интерфейса выберите «Удалить».

Затем пользовательский интерфейс администратора показал мне экран, на котором отображаются изменения, которые я собираюсь внести, и когда я выбрал «Принять», мой сайт перенаправляет меня на пустую страницу с сообщением: «Веб-сайт обнаружил непредвиденную ошибку. Попробуйте. снова позже."

Когда я проверяю журналы, я вижу это сообщение об ошибке:

[06-Nov-2021 03:07:49] ПРЕДУПРЕЖДЕНИЕ: [pool www] child 2014 сказал в stderr: «ВНИМАНИЕ: сообщение PHP: Uncaught PHP Exception Drupal\Core\Database\DatabaseExceptionWrapper: «SQLSTATE[42S22]: столбец не найден : 1054 Неизвестный столбец 'field_description_teaser_value' в 'предложении where': SELECT 1 AS expression"
[06-Nov-2021 03:07:49] ВНИМАНИЕ: [pool www] ребенок 2014 сказал в stderr: "FROM"
[06-Nov-2021 03:07:49] ВНИМАНИЕ: [pool www] child 2014 сказал в stderr: "{node_revision__field_description} t"
[06-Nov-2021 03:07:49] ПРЕДУПРЕЖДЕНИЕ: [pool www] child 2014 сказал в stderr: «ГДЕ (field_description_teaser_value НЕ NULL) ИЛИ (field_description_teaser_format НЕ NULL) ИЛИ (field_description_hidden_value НЕ NULL) ИЛИ (field_description_hidden_format IS НЕ НОЛЬ)"
[06-Nov-2021 03:07:49] ПРЕДУПРЕЖДЕНИЕ: [pool www] child 2014 сказал в stderr: «LIMIT 1 OFFSET 0; Array»
[06-Nov-2021 03:07:49] ВНИМАНИЕ: [pool www] ребенок 2014 сказал в stderr: "("
[06-Nov-2021 03:07:49] ВНИМАНИЕ: [pool www] ребенок 2014 сказал в stderr: ")"
[06-Nov-2021 03:07:49] ПРЕДУПРЕЖДЕНИЕ: [pool www] child 2014 сказал в stderr: "" в строке /var/www/html/web/core/lib/Drupal/Core/Database/Connection.php 701"
06.11.2021, 03:07:49 [ошибка] 2010#2010: *21776 FastCGI отправлено в stderr: «Сообщение PHP: Uncaught PHP Exception Drupal\Core\Database\DatabaseExceptionWrapper: «SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец field_description_teaser_value в предложении where: SELECT 1 AS выражение
ОТ
{node_revision__field_description} т
ГДЕ (field_description_teaser_value НЕ NULL) ИЛИ (field_description_teaser_format НЕ NULL) ИЛИ (field_description_hidden_value НЕ NULL) ИЛИ (field_description_hidden_format НЕ NULL)
ПРЕДЕЛ 1 СМЕЩЕНИЕ 0; Множество
(
)
"в /var/www/html/web/core/lib/Drupal/Core/Database/Connection.php строка 701" при чтении заголовка ответа из восходящего потока, клиент: 172.18.0.6, сервер: запрос: "GET /admin/ структура/типы/управление/my_custom_content_type/fields/node.my_custom_content_type.field_description/storage HTTP/1.1", восходящий поток: "fastcgi://unix:/run/php-fpm.sock:", хост: "custom-site.ddev .site", реферер: "https://custom-site.ddev.site/admin/structure/types/manage/my_custom_content_type/fields"

При запуске phpmyadmin, ни одно из имен столбцов, перечисленных в предложении where, не существует в node_revision__field_description таблица, так как эти столбцы созданы для другого типа поля.

На данный момент я не мог создать какой-либо контент с использованием этого типа контента, и я хотел бы удалить его и начать с нуля, создав новый с лучшими именами машин и пытаясь избежать этих ошибок.

Мой вопрос: есть ли безопасный способ удалить тип контента с помощью SQL или drush? Я попытался удалить его через интерфейс администратора, но это привело к той же ошибке, что и при попытке удалить поле.

флаг cn
Как вы изначально пытались удалить его? Вы всегда должны сначала использовать интерфейс администратора/управление конфигурацией.
pazitos10 avatar
флаг np
@PatrickKenny, спасибо за комментарий. Я обновил свой вопрос, добавив некоторые пояснения, но tl; dr будет следующим: чтобы попытаться удалить его, я использовал интерфейс администратора / управление конфигурацией.
Рейтинг:0
флаг np

Мне удалось решить мою проблему, вручную добавив отсутствующие столбцы в таблицы, связанные с использованием phpmyadmin.

Первый:

  • Сделал бэкап БД (на всякий случай).

Во-вторых, я создал копию задействованных таблиц и переместил такие копии в другую базу данных, сохранив как данные, так и структуру:

  • node_revision__field_description
  • node__field_description

После создания резервной копии я приступил к созданию отсутствующих столбцов и скопировал их атрибуты из аналогичных столбцов в других таблицах (созданных для других типов контента).

Затем я без проблем удалил тип контента через интерфейс администратора.

Наконец, я восстановил исходные копии таблиц в БД, заменив их измененными версиями.

Я знаю, что это, вероятно, не лучшее решение для всех, но это сработало для меня.

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

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