У меня некоторое время была проблема с Doctrine Migrations. Несколько недель назад я думал, что исправил проблему, удалив все файлы миграции, и вместо этого сделал один большой чистый diff. Но, похоже, проблема вернулась.
Примечание: я уже проверил версию сервера
Итак, у меня есть эта таблица, созданная в моем большом файле миграции
CREATE TABLE hour_synthesis
(
id INT NOT NULL,
fiscal_year_id INT DEFAULT NULL,
month VARCHAR(255) NOT NULL,
year VARCHAR(255) NOT NULL,
worked_days VARCHAR(255) NOT NULL,
hours_to_sell VARCHAR(255) NOT NULL,
adapted_hours VARCHAR(255) NOT NULL,
percentage NUMERIC(5, 2) DEFAULT '100' NOT NULL,
PRIMARY KEY (id)
)
Как вы можете видеть здесь, в поле percentage
есть все необходимое, но если я когда-нибудь начну diff ...
public function up(Schema $schema) : void
{
// this up() migration is auto-generated, please modify it to your needs
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.');
$this->addSql('ALTER TABLE hour_synthesis ALTER percentage TYPE NUMERIC(5, 2)');
$this->addSql('ALTER TABLE hour_synthesis ALTER percentage SET DEFAULT \'100\'');
$this->addSql('ALTER TABLE hour_synthesis ALTER percentage SET NOT NULL');
$this->addSql('ALTER TABLE hour_synthesis ALTER percentage DROP DEFAULT');
$this->addSql('ALTER TABLE hour_synthesis ALTER percentage TYPE NUMERIC(5, 2)');
$this->addSql('COMMENT ON COLUMN hour_synthesis.percentage IS NULL');
$this->addSql('ALTER TABLE product ALTER stock_management SET DEFAULT \'false\'');
}
Обратите внимание, что миграция устанавливает тип, устанавливает значение по умолчанию, устанавливает не нуль, отбрасывает установленное значение по умолчанию, снова устанавливает тип и комментирует с IS NULL
.
(Последняя строка не связана, но это еще один из этих артефактов миграции)
Конечно, если я выполню эту миграцию, она будет работать, но следующий diff принесет точно такой же код. Я попытался удалить некоторые строки, например DROP DEFAULT
, чтобы на самом деле было установлено значение по умолчанию. Но опять же, следующий diff точно такой же.
Я попытался обновить мою схему, чтобы увидеть, что я мог видеть ... Угадайте, что?
$ db d:s:u --dump-sql
The following SQL statements will be executed:
ALTER TABLE hour_synthesis ALTER percentage TYPE NUMERIC(5, 2);
ALTER TABLE hour_synthesis ALTER percentage SET DEFAULT '100';
ALTER TABLE hour_synthesis ALTER percentage SET NOT NULL;
ALTER TABLE hour_synthesis ALTER percentage DROP DEFAULT;
ALTER TABLE hour_synthesis ALTER percentage TYPE NUMERIC(5, 2);
COMMENT ON COLUMN hour_synthesis.percentage IS NULL;
ALTER TABLE product ALTER stock_management SET DEFAULT 'false';
(db
мой псевдоним докера)
Мне кажется, что я застрял в этом бесконечном цикле неудачных миграций, любые советы более чем приветствуются, потому что я на самом деле не чувствую необходимости удалять мои файлы миграции каждый раз, когда я запускаю эту проблему.