Ошибка при пересборке с bookmarks_polymorphic

Здравствуйте,

у меня ошибка при пересборке:

FAILED

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’ не удалась с кодом возврата #<Process::Status: pid 1121 exit 1>
Место возникновения ошибки: /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn’
Выполнение не удалось с параметрами {“cd”=>“$home”, “hook”=>“db_migrate”, “cmd”=>[“su discourse -c ‘bundle exec rake db:migrate’”]}
Загрузка не удалась с кодом выхода 1

При прокрутке вверх видно:

PG::DependentObjectsStillExist: ОШИБКА: невозможно удалить столбец post_id таблицы bookmarks, так как от него зависят другие объекты
ДЕТАЛИ: триггер bookmarks_polymorphic_data_sync на таблице bookmarks зависит от столбца post_id таблицы bookmarks
СОВЕТ: Используйте DROP … CASCADE, чтобы удалить также зависимые объекты.

Как исправить эту ошибку?

Возможно, стоит указать, на какую ветку вы ориентируетесь — stable или tests-passed?

Привет,

обычно это ветка tests-passed…

Я решил проблему, удалив триггер вручную. Но я не знаю, не вызовет ли это проблем в будущем.

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

К сожалению, при чистой установке версии 3.0.0.beta16 в psql нет такого триггера, который можно было бы удалить.
Тем не менее, восстановление резервной копии, созданной из версии 2.9.0.beta12, завершается ошибкой:

ERROR: невозможно удалить столбец post_id таблицы bookmarks, так как другие объекты зависят от него
DETAIL: триггер bookmarks_polymorphic_data_sync на таблице bookmarks зависит от столбца post_id таблицы bookmarks

РЕДАКТИРОВАНИЕ:
Теперь понял — удалил триггер в исходной базе данных; обновление и восстановление резервных копий снова заработали — спасибо за подсказку.

@DeviceNull

Как вам удалось удалить триггер?

Сталкиваюсь с похожей проблемой при обновлении Discourse

Вызвано:
PG::DependentObjectsStillExist: ОШИБКА: невозможно удалить столбец post_id таблицы bookmarks, так как другие объекты зависят от него
ДЕТАЛИ: триггер bookmarks_polymorphic_data_sync в таблице bookmarks зависит от столбца post_id таблицы bookmarks
СОВЕТ: Используйте DROP ... CASCADE, чтобы удалить также зависимые объекты.

У кого-то возникала похожая проблема, когда обновление завершалось ошибкой на этапе миграции базы данных?

Сделал следующее, и обновление прошло успешно!

Запустите контейнер, так как он остановлен во время обновления.

./launcher start app
./launcher enter app

Войдите в командную строку psql.

sudo -u postgres psql discourse

Посмотрите триггеры.

SELECT tgname FROM pg_trigger;

Удалите триггер.

DROP TRIGGER IF EXISTS bookmarks_polymorphic_data_sync ON bookmarks CASCADE;

Теперь выполните пересборку.

./launcher rebuild app

  1. Через ваш терминал (предположительно bash) запустите консоль MySQL внутри контейнера:
    docker exec -i name_of_your_container mysql

В консоли MySQL:
use discourse;
DROP TRIGGER bookmarks.bookmarks_polymorphic_data;

Выйдите из консоли с помощью команды
exit

После этого скрипт обновления, вероятно, сможет удалить столбец, и всё должно пройти гладко — держим кулаки.