postgresql doctrine Код в миграции $this->addSql(CREATE SCHEMA public) - Как его убрать

Проблема

Генератор миграции добавляет в down() код:

$this->addSql('CREATE SCHEMA public');

-- который вообще говоря приводит к ошибке при откате (т.е. эту схему никто и не удалял)

Решение

В добавьте класс (пространство имен может быть любым):

<?php

namespace  App\Symfony\Patch;

use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;

/**
 * Выключаем добавление беcполезной команды в down миграции
 */
class MigrationEventSubscriber implements EventSubscriber
{
    public function getSubscribedEvents()
    {
        return array(
            'postGenerateSchema',
        );
    }

    public function postGenerateSchema(GenerateSchemaEventArgs $Args)
    {
        $Schema = $Args->getSchema();

        if (! $Schema->hasNamespace('public')) {
            $Schema->createNamespace('public');
        }
    }
}

И зарегистрируйте его в конфиге:

# app/config/services.yml
services:
    doctrineMigrationDiffListener:
        class: App\Symfony\Patch\MigrationEventSubscriber
        tags:
            - { name: doctrine.event_subscriber, connection: default }

Источник решения: https://github.com/doctrine/dbal/issues/...

Key Words for FKN + antitotal forum (CS VSU):

#[When('dev')]
#[AutoconfigureTag('doctrine.event_listener', ['event' => ToolEvents::postGenerateSchema])]
class FixPostgreSQLDefaultSchemaListener
{
    public function postGenerateSchema(GenerateSchemaEventArgs $args)
    {
        $schemaManager = $args->getEntityManager()
            ->getConnection()
            ->createSchemaManager();

        $schema = $args->getSchema();

        foreach ($schemaManager->listSchemaNames() as $namespace) {
            if (!$schema->hasNamespace($namespace)) {
                $schema->createNamespace($namespace);
            }
        }
    }
}