-
-
Notifications
You must be signed in to change notification settings - Fork 386
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CREATE SCHEMA public
is added to all down migrations in Postgres
#1415
Comments
We got the exact same problem. Dont know how to work around it :/ |
Related to doctrine/dbal#5609 and doctrine/dbal#1110 I think. |
I'm having this problem, too. I've been manually removing the line because it causes errors when attempting to roll back to a previous migration. |
Reading related doctrine/dbal issues it seems that is no easy way to fix it on a lower lib level. Fix on one side causes some issues on the other, ex. filtering out 'public' scheme on # services.yaml
services:
Doctrine\Migrations\Configuration\Migration\ConfigurationLoader: '@doctrine.migrations.configuration_loader'
doctrine.migrations.dependency_factory:
class: Doctrine\Migrations\DependencyFactory
configurator: '@App\Migrations\DependencyFactoryConfigurator' <?php
namespace App\Migrations;
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
use Doctrine\DBAL\Schema\Comparator;
use Doctrine\DBAL\Schema\PostgreSQLSchemaManager;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\DependencyFactory;
use Doctrine\Migrations\Generator\DiffGenerator;
use Doctrine\Migrations\Provider\EmptySchemaProvider;
class DependencyFactoryConfigurator
{
public function __invoke(DependencyFactory $dependencyFactory)
{
$dependencyFactory->setDefinition(
DiffGenerator::class,
function () use ($dependencyFactory): DiffGenerator {
$connection = $dependencyFactory->getConnection();
$schemaManager = $connection->createSchemaManager();
$platform = $connection->getDatabasePlatform();
if ($platform instanceof PostgreSQLPlatform) {
$schemaManager = new class($connection, $platform) extends PostgreSQLSchemaManager {
public function createComparator(): Comparator
{
return new class($this->_platform) extends Comparator {
public function compareSchemas(Schema $fromSchema, Schema $toSchema)
{
$schemaDiff = parent::compareSchemas($fromSchema, $toSchema);
if (isset($schemaDiff->newNamespaces['public'])) {
unset($schemaDiff->newNamespaces['public']);
}
return $schemaDiff;
}
};
}
};
}
return new DiffGenerator(
$connection->getConfiguration(),
$schemaManager,
$dependencyFactory->getSchemaProvider(),
$platform,
$dependencyFactory->getMigrationGenerator(),
$dependencyFactory->getMigrationSqlGenerator(),
new EmptySchemaProvider($schemaManager)
);
}
);
}
} |
Bug Report
Summary
I'm using the bundle with Postrgres 16. The database URL is
postgresql://$DB_USER:$DB_PASSWORD@db:5432/$DB_NAME?serverVersion=16.2&charset=utf8
. But on everydoctrine:migrations:diff
it creates migrations like the following:No matter what are other changes, it ALWAYS adds the
$this->addSql('CREATE SCHEMA public');
line to all migrations.How to fix it?
The text was updated successfully, but these errors were encountered: