-
-
Notifications
You must be signed in to change notification settings - Fork 389
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)
);
}
);
}
} |
I've tried and failed to reproduce the issue with a brand new Symfony app: https://github.com/greg0ire/sample-pg-app If you know how to do that, please send a PR. Cc @stof since you mentioned this issue earlier today. EDIT: issue "reproduced", I was using the wrong command 🤦 |
Fixed as of 3.8.2
@speller what did you mean by "3.8.3"? There isn't such a version, is there? |
@greg0ire Unfortunately it is not fixed, at least not for DBAL 3. I tried to upgrade to ORM 3.x again today and ran into this (and #1406). Relevant versions in my app:
I created a PR in your reproducer repo at greg0ire/sample-pg-app#2. Running Please reopen the issue. |
@greg0ire it seems I messed up the version in the issue with some other package... I confirm the subject issue is not happening after upgrading to 3.8.2 with dbal 4.2.1. |
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: