Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

490
Vistas
¿Cómo migrar a un esquema específico de base de datos PostgreSQL trabajando con Symfony y Doctrine?

Hice una migración después de crear la estructura de mi base de datos usando el comando make:entity :

$ consola symfony hacer:migración

Ahora, quiero migrar a un esquema específico en mi base de datos PostgresSQL .

En la documentación de Symfony dice:

MESAS MANUALES. Es un caso de uso común que, además de la estructura de la base de datos generada en función de las entidades de su doctrina, es posible que necesite tablas personalizadas. De forma predeterminada, dichas tablas se eliminarán mediante el comando doctrine:migrations:diff . Si sigue un esquema específico, puede configurar la doctrina/dbal para ignorar esas tablas. Digamos que todas las tablas personalizadas tendrán el prefijo t_. En este caso, solo tienes que agregar la siguiente opción de configuración a tu configuración de doctrina:

 doctrine: dbal: schema_filter: ~^(?!t_)~

Entiendo que schema_filter es un filtro que se aplica a los nombres de las tablas (¿solo tablas?) a través de una expresión regular. Bueno, pero schema_filter no hace referencia a los esquemas creados en una base de datos PostgreSQL .

Entonces, ¿cómo puedo migrar a un esquema específico en una base de datos?

Cuando ejecuto el comando:

$ consola symfony hacer:migración

crea un archivo de migración que contiene una clase con las funciones 'up' y 'down', ambas con un parámetro $schema . Aquí un fragmento:

 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('CREATE SEQUENCE division_id_seq INCREMENT BY 1 MINVALUE 1 START 1');

Este parámetro no puede asignar un valor cuando se declara. Debe ser nulo.

¿Es posible usarlo para migrar a un esquema específico?

Bueno, mientras encuentro una manera, lo hice así:

public function up(Schema $schema) : void { // esta migración up() se genera automáticamente, modifíquela según sus necesidades $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'La migración solo se puede ejecutar de manera segura en 'postgresql'.');

 $this->addSql('CREATE SEQUENCE my_schema_name.division_id_seq INCREMENT BY 1 MINVALUE 1 START 1');

Quiero decir que escribo el nombre del esquema en todo el código de migración generado por el comando.

Pero sigo creyendo que es posible hacerlo de otra manera. Si es así, ¿entonces cómo?

Lo olvidé. La migración falla cuando intento con esta línea antes de la primera oración:

 $this->addSql('SET search_path TO my_schema_name');

También intento asignar el nombre del esquema al parámetro $schema:

 $schema = 'my_schema_name'

Tampoco funcionó.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Bueno, gracias. Leo esto:

el esquema debe configurarse a través de la conexión db dsn, todas las tablas por defecto terminan en ese esquema.

Luego intento establecer los parámetros de connectstring en doctrine.yaml : url , dbname y dbname , usando esta notación: dbname.schema , incluso: dbname/schema , pero no funciona.

Entonces, a pesar de esto:

no debe codificar los nombres de los esquemas en las migraciones.

En el archivo de migración era necesario configurar el esquema para la conexión:

 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->connection->exec('SET search_path TO my_schema_name;'); $this->addSql('CREATE SEQUENCE division_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); ...

Sin embargo, la migration_versions no existía en el esquema, así que tuve que crearla.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda