DEV Community

Cover image for Resolvendo problema de "foreign key constraint" ao migrar o Ghost CMS da v4 para v5
Marcelo Albuquerque
Marcelo Albuquerque

Posted on

Resolvendo problema de "foreign key constraint" ao migrar o Ghost CMS da v4 para v5

Ao atualizarmos o Ghost para sua versão 5, diversos scripts de migração são executados, incluindo scripts que realizam alterações no Banco de Dados. E é justamente um desses scripts que ao não conseguir realizar uma mudança na base de dados, impossibilita a execução do Ghost.

Esse script tenta realizar uma mudança que afeta uma tabela com foreign key constraint , o que é bloqueado pelo Banco de Dados.

O script em questão, tenta executar o seguinte:

alter table `subscriptions` modify  `tier_id` varchar(24) not null
Enter fullscreen mode Exit fullscreen mode

Podemos observar que ele tenta executar uma mudança na tabela subscriptions e nos retorna o seguinte erro:

Message: Ghost was able to start, but errored during boot with: alter table `subscriptions` modify  `tier_id` varchar(24) not null  - Cannot change column 'tier_id': used in a foreign key constraint 'subscriptions_tier_id_foreign'
Context: [object Object]
Help: Error occurred while executing the following migration: 2022-10-18-05-39-drop-nullable-tier-id.js
Enter fullscreen mode Exit fullscreen mode

Para solucionar esse problema devemos desabilitar a checagem foreign keys antes de executar o script, após a execução da query podemos reabilitar a checagem normalmente. O script a seguir deve ser executado diretamente na base de dados de forma manual:

USE ghost_test; # Aqui seleciono a base de dados onde a tabela se encontra
SET foreign_key_checks = 0; # Desabilito as checagens foreign keys
alter table `subscriptions` modify  `tier_id` varchar(24) not null; # Executo a query que o Ghost tentou realizar
SET foreign_key_checks = 1; # Reabilito as checagens foreign keys
Enter fullscreen mode Exit fullscreen mode

Agora, de volta ao Ghost, podemos executar o comando para iniciar sua execução:

ghost start
Enter fullscreen mode Exit fullscreen mode

Processo finalizado!

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay