Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
28
respostas

Erro

Que banco é que vc está criando Vinícius? Quando eu tento criar um banco tenho esse erro:

PS C:\DoctrineContinuacao> vendor\bin\doctrine orm:schema-tool:create

 !
 ! [CAUTION] This operation should not be executed in a production environment!
 !

 Creating database schema...


In ToolsException.php line 34:

  Schema-Tool failed with Error 'An exception occurred while executing 'CREAT  
  E TABLE ator (id_ator SERIAL NOT NULL, primeiro_nome VARCHAR(45) NOT NULL,   
  ultimo_nome VARCHAR(45) NOT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME  
   ZONE DEFAULT 'NOW()' NOT NULL, PRIMARY KEY(id_ator))':

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists'  
   while executing DDL: CREATE TABLE ator (id_ator SERIAL NOT NULL, primeiro_  
  nome VARCHAR(45) NOT NULL, ultimo_nome VARCHAR(45) NOT NULL, data_atualizad  
  o TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, PRIMARY KEY(id_a  
  tor))


In AbstractPostgreSQLDriver.php line 66:

  An exception occurred while executing 'CREATE TABLE ator (id_ator SERIAL NO  
  T NULL, primeiro_nome VARCHAR(45) NOT NULL, ultimo_nome VARCHAR(45) NOT NUL  
  L, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL,  
   PRIMARY KEY(id_ator))':

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists   


In PDOConnection.php line 83:

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists  


In PDOConnection.php line 78:

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists


orm:schema-tool:create [--dump-sql]
28 respostas

Travei nesse ponto! Alguém me consegue dar uma ajuda?

Márcio, você está tentando criar uma tabela que já existe. Esse é seu problema. :-)

O banco aparentemente já está criado.

Eu deletei a tabela alura_filmes_novo e tentei executar de novo, porém, o erro persiste Vinícios.

<?php

namespace Alura\Doctrine\Helper;

use Doctrine\DBAL\Types\Type;
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Alura\Doctrine\Type\TipoClassificacao;

class EntityManagerCreator
{
    public function criaEntityManager(): EntityManagerInterface
    {
        $config = Setup::createXMLMetadataConfiguration(
            [__DIR__ . '/../../mapeamentos']
        );
        $con = [
            'driver' => 'pdo_pgsql',
            'host' => 'localhost',
            'dbname' => 'alura_filmes_novo',
            'user' => 'postgres',
            'password' => '1112',
        ];

        Type::addType('classificacao', TipoClassificacao::class);

        $em = EntityManager::create($con, $config);

        $em->getConnection()
           ->getDatabasePlatform()
           ->registerDoctrineTypeMapping(
                'CLASSIFICACAO',
                'classificacao'
            );

        return $em;
    }
}




PS C:\DoctrineAvancado> vendor\bin\doctrine orm:schema-tool:create

 !
 ! [CAUTION] This operation should not be executed in a production environment!
 !

 Creating database schema...


In AbstractPostgreSQLDriver.php line 73:

  An exception occurred in driver: SQLSTATE[08006] [7] FATAL:  database "alur  
  a_filmes_novo" does not exist


In PDOConnection.php line 31:

  SQLSTATE[08006] [7] FATAL:  database "alura_filmes_novo" does not exist  


In PDOConnection.php line 27:

  SQLSTATE[08006] [7] FATAL:  database "alura_filmes_novo" does not exist


orm:schema-tool:create [--dump-sql]

PS C:\DoctrineAvancado>

Márcio, acho que você tá fazendo confusões com o banco de dados.

alura_filmes_novo não é uma tabela. É um banco de dados. Pra você se conectar nele, ele precisa existir.

Seu erro horiginal era que a tabela ator já existia no banco em que você estava se conectando.

Então Vinicius, eu criei somente o banco alura_filmes_novo através do postgre sem tabela nenhuma, porém, quando eu tento criar o schema exatamente como faz na vídeo aula, dá esse erro para mim. Todo o meu código está igual ao seu. Eu até peguei os seus arquivo para testar com eles, o erro persiste referente a classificação.

PS C:\DoctrineAvancado> vendor\bin\doctrine orm:schema-tool:create

 !
 ! [CAUTION] This operation should not be executed in a production environment!
 !

 Creating database schema...


In ToolsException.php line 34:

  Schema-Tool failed with Error 'An exception occurred while executing 'CREAT  
  E TABLE filme (id_filme SERIAL NOT NULL, id_idioma_original SMALLINT NOT NU  
  LL, id_idioma_audio SMALLINT NOT NULL, titulo VARCHAR(255) NOT NULL, sinops  
  e TEXT DEFAULT NULL, ano_lancamento VARCHAR(4) DEFAULT NULL, data_atualizad  
  o TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CL  
  ASSIFICACAO NOT NULL, PRIMARY KEY(id_filme))':

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not   
  exist
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...   
                                                               ^' while execu  
  ting DDL: CREATE TABLE filme (id_filme SERIAL NOT NULL, id_idioma_original   
  SMALLINT NOT NULL, id_idioma_audio SMALLINT NOT NULL, titulo VARCHAR(255) N  
  OT NULL, sinopse TEXT DEFAULT NULL, ano_lancamento VARCHAR(4) DEFAULT NULL,  
   data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, c  
  lassificacao CLASSIFICACAO NOT NULL, PRIMARY KEY(id_filme))


In AbstractPostgreSQLDriver.php line 79:

  An exception occurred while executing 'CREATE TABLE filme (id_filme SERIAL   
  NOT NULL, id_idioma_original SMALLINT NOT NULL, id_idioma_audio SMALLINT NO  
  T NULL, titulo VARCHAR(255) NOT NULL, sinopse TEXT DEFAULT NULL, ano_lancam  
  ento VARCHAR(4) DEFAULT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZON  
  E DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICACAO NOT NULL, PRIMARY K  
  EY(id_filme))':

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not   
  exist
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...   
                                                               ^


In PDOConnection.php line 83:

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not   
  exist
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...   
                                                               ^


In PDOConnection.php line 78:

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not   
  exist
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...   
                                                               ^


orm:schema-tool:create [--dump-sql]

PS C:\DoctrineAvancado> 

Márcio, rolou alguma confusão sua entre os 2 bancos pois você está tentando criar o schema do banco usando o tipo CLASSIFICACAO sem antes criar esse tipo no banco de dados.

Se não me engano, logo na segunda aula isso é tratado.

Vou refazer todo o processo todo para ver se dá certo Vinicius.

Então Vinicius, o novo arquivo do banco que vc passou para a gente neste capítulo não está atualizado como o teu.

Como assim, Márcio? Em qual capítulo, e qual o diff?

O arquivo db.sql de recursos avançados está com o conteúdo do mapeamento com xml.

Márcio, você pode me informar em que capítulo específico esse arquivo com erro é disponibilizado, por favor?

Está no primeiro capítulo em Preparando o ambiente de recursos avançados com doctrine.

Então Vinicius, vc tá pulando a ordem da instrução no capítulo 2 de Tipos personalizados, porque até lá vc já tinha criado o esquema do banco no vídeo Unique em várias colunas e não tinha apagado mais. Depois no vídeo Tipos personalizados vc cria uma novo esquema sem fazer um drop. Eu tentei criar esse esquema que me retorna esse erro.

C:\DoctrineAvancado>vendor\bin\doctrine orm:schema-tool:create

 !                                                                                                                      
 ! [CAUTION] This operation should not be executed in a production environment!                                         
 !                                                                                                                      

 Creating database schema...


In ToolsException.php line 34:

  Schema-Tool failed with Error 'An exception occurred while executing 'CREATE TABLE filme (id_filme SERIAL NOT NULL, id_idioma_original   
  SMALLINT NOT NULL, id_idioma_audio SMALLINT NOT NULL, titulo VARCHAR(255) NOT NULL, sinopse TEXT DEFAULT NULL, ano_lancamento VARCHAR(4  
  ) DEFAULT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICACAO NOT NULL, PRIMARY   
  KEY(id_filme))':                                                                                                                         

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not exist                                                         
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...                                                               
                                                               ^' while executing DDL: CREATE TABLE filme (id_filme SERIAL NOT NULL, id_i  
  dioma_original SMALLINT NOT NULL, id_idioma_audio SMALLINT NOT NULL, titulo VARCHAR(255) NOT NULL, sinopse TEXT DEFAULT NULL, ano_lanca  
  mento VARCHAR(4) DEFAULT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICACAO NOT  
   NULL, PRIMARY KEY(id_filme))                                                                                                            


In AbstractPostgreSQLDriver.php line 79:

  An exception occurred while executing 'CREATE TABLE filme (id_filme SERIAL NOT NULL, id_idioma_original SMALLINT NOT NULL, id_idioma_au  
  dio SMALLINT NOT NULL, titulo VARCHAR(255) NOT NULL, sinopse TEXT DEFAULT NULL, ano_lancamento VARCHAR(4) DEFAULT NULL, data_atualizado  
   TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICACAO NOT NULL, PRIMARY KEY(id_filme))':                 

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not exist                                                         
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...                                                               
                                                               ^                                                                           


In PDOConnection.php line 83:

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not exist  
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...        
                                                               ^                    

In PDOConnection.php line 78:

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not exist  
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...        
                                                               ^                    
orm:schema-tool:create [--dump-sql]

Eu acredito que está faltando o arquivo do banco com o novo formato para eu criar o novo banco alura_filmes_novo com o devido esquema de classificacao

Então Márcio, se você tivesse me apontado o capítulo onde você está recebendo o erro teria facilitado bastante minha vida. rsrsrs

Mas corri atrás e vamos lá. Nesse capítulo aqui você recebe o bd.sql: https://cursos.alura.com.br/course/php-doctrine-mapeamento-banco-legado/task/62389

Nesse arquivo de texto você tem a definição do tipo CLASSIFICACAO.

Já o banco alura_filmes_novo realmente só vai ser criado pelo Doctrine então não é pra eu fornecer nenhum outro arquivo não. :-)

Eu estou em recursos avançados do doctrine, estou no segundo vídeo desse capítulo onde vc cria o esquema do banco de dados depois de ter criado toda a parte do tipo classificacao. Quando eu tento criar o esquema para o banco alura_filmes_novo aparece esse erro que eu passei acima para vc.

Márcio, o segundo vídeo desse treinamento "Recursos avançados" é esse: https://cursos.alura.com.br/course/php-doctrine-indices-heranca-sql-nativo/task/62260

Você pode, por favor, me enviar o link do vídeo em que o erro acontece? Senão eu vou ter que reassistir o treinamento inteiro até encontrar o problema.

rsrs

Aqui nesse vídeo Vinicius, vc cria uma esquema e é onde eu não estou conseguindo avançar.

https://cursos.alura.com.br/course/php-doctrine-indices-heranca-sql-nativo/task/62264

Eu segui o passo a passo até essa parte do curso, porém, quando tento criar o esquema do banco que nem vc faz no vídeo, gera esse erro passado acima para mim dizendo que classificacao não existe.

Márcio, assisti somente esse vídeo e não vi o problema.

Eu estava conectado no banco de dados que já possui o tipo CLASSIFICACAO, certo? Conforme o arquivo bd.sql que foi disponibilizado.

Ao gerar o schema, o PHP só atualizou as tabelas que tinha que atualizar, mas o tipo continuou lá.

Isso foi explicado nesse vídeo aqui:

https://cursos.alura.com.br/course/php-doctrine-indices-heranca-sql-nativo/task/62263

Eu digo que lá no pgAdmin tem que executar a criação do tipo. :-)

Quer acessar o meu note e ver se consegue gerar essa tabela para mim Vinicius?

Você rodou o comando pra criar o tipo no pgAdmin antes de tentar gerar o esquema do banco?

Rodei esse script do arquivo que vc disponibiliza para a gente depois de criar o banco alura_filmes_novo

CREATE TABLE ator
(
  id_ator         SERIAL      PRIMARY KEY,
  primeiro_nome   VARCHAR(45) NOT NULL,
  ultimo_nome     VARCHAR(45) NOT NULL,
  data_atualizado TIMESTAMP   NOT NULL DEFAULT 'NOW()'
);
CREATE INDEX idx_ultimo_nome ON ator USING btree (ultimo_nome);
CREATE UNIQUE INDEX idx_nome_completo_unique ON ator (primeiro_nome, ultimo_nome);

CREATE TABLE idioma
(
  id_idioma       SMALLSERIAL PRIMARY KEY,
  nome            CHAR(20)  NOT NULL,
  data_atualizado TIMESTAMP NOT NULL DEFAULT NOW()
);

CREATE TYPE CLASSIFICACAO AS ENUM ('G', 'PG', 'PG-13', 'R', 'NC-17');
CREATE TABLE filme
(
  id_filme           SERIAL PRIMARY KEY,
  titulo             VARCHAR(255)    NOT NULL,
  sinopse            TEXT            DEFAULT NULL,
  ano_lancamento     VARCHAR(4)        NOT NULL,
  id_idioma_audio    SMALLINT        NOT NULL,
  id_idioma_original SMALLINT        NOT NULL,
  classificacao      CLASSIFICACAO    DEFAULT 'G',
  data_atualizado    TIMESTAMP        NOT NULL DEFAULT NOW(),
  CONSTRAINT fk_id_idioma_audio_filme FOREIGN KEY (id_idioma_audio) REFERENCES idioma (id_idioma),
  CONSTRAINT fk_id_idioma_original_filme FOREIGN KEY (id_idioma_original) REFERENCES idioma (id_idioma)
);

CREATE TABLE ator_filme
(
  id_ator  INT NOT NULL,
  id_filme INT NOT NULL,
  PRIMARY KEY (id_ator, id_filme),
  CONSTRAINT fk_ator FOREIGN KEY (id_ator) REFERENCES ator (id_ator),
  CONSTRAINT fk_filme FOREIGN KEY (id_filme) REFERENCES filme (id_filme)
);
solução!

Vê se isso resolve:

https://cursos.alura.com.br/course/php-doctrine-indices-heranca-sql-nativo/task/79503

Quando crio as tabelas antes o erro fala que já existe.

C:\DoctrineAvancado>vendor\bin\doctrine orm:schema-tool:create
 !                                                                                                                      
 ! [CAUTION] This operation should not be executed in a production environment!                                         
 !                                                                                                                      

 Creating database schema...


In ToolsException.php line 34:

  Schema-Tool failed with Error 'An exception occurred while executing 'CREATE TABLE ator (id_ator SERIAL NOT NULL, primeiro_nome VARCHAR  
  (45) NOT NULL, ultimo_nome VARCHAR(45) NOT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, PRIMARY KEY(i  
  d_ator))':                                                                                                                               

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists' while executing DDL: CREATE TABLE ator (id_ator SERIAL NOT   
  NULL, primeiro_nome VARCHAR(45) NOT NULL, ultimo_nome VARCHAR(45) NOT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW  
  ()' NOT NULL, PRIMARY KEY(id_ator))                                                                                                      


In AbstractPostgreSQLDriver.php line 66:

  An exception occurred while executing 'CREATE TABLE ator (id_ator SERIAL NOT NULL, primeiro_nome VARCHAR(45) NOT NULL, ultimo_nome VARC  
  HAR(45) NOT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, PRIMARY KEY(id_ator))':                       

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists                                                               


In PDOConnection.php line 83:

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists  


In PDOConnection.php line 78:

C:\DoctrineAvancado>

Mas, Márcio.

Se o esquema já existe, por que você está tentado criá-lo? Eu não to entendendo qual o seu propósito.

=/

Já consegui criar o esquema Vinicius! A dica que vc passou acima funcionou.