1
resposta

Ao executar o migration:generate obtenho que o esquema não foi encontrado

Tentei corrigir de algumas formas o problema, inicialmente estava com Node.JS na versão 20 LTS, agora reduzir para versão 18, mas sempre obtenho o mesmo erro.

Na versão 20 inclusive por algum motivo o "typeorm-ts-node-esm", só funcionou o "typeorm-ts-node-commonjs", mas independente da forma o problema inicial não se resolveu. Obs: O create funciona e cria o arquivo, no entanto não gera nada no banco, fazendo o "run" dizer que não há pendencias.

Mensagem devolvida: No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command

Packages Criados:

*"typeorm": "ts-node ./nodemodules/typeorm/cli",
"migration:run": "npm run typeorm migration:run -- -d ./src/config/typeorm.ts",
"migration:generate": "npm run typeorm -- -d ./src/config/typeorm.ts migration:generate",
"migration:create": "npm run typeorm -- migration:create",
"migration:revert": "npm run typeorm -- -d ./src/config/typeorm.ts migration:revert"*

Comando executado: *npm run migration:generate ./src/db/migrations/teste*

Arquivo de configuração dentro de "src/config"

import { DataSource, DataSourceOptions } from 'typeorm';
import { registerAs } from '@nestjs/config';
import { config } from 'dotenv';

config({ path: '.env' });

const dataSourceOptions: DataSourceOptions = {
  type: 'postgres',
  host: process.env.DB_HOST,
  port: Number(process.env.DB_PORT),
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
  entities: [__dirname + '/../**/*.entity.{js,ts}'],
  migrations: [__dirname + '/migrations/*.{js,ts}'],
  synchronize: false,
};

export default registerAs('typeorm', () => config);
export const connectionSource = new DataSource(dataSourceOptions);

AppModule:

ConfigModule.forRoot({ isGlobal: true, load: [typeorm] }),
    TypeOrmModule.forRootAsync({
      useClass: PostgresConfigService,
      inject: [PostgresConfigService],
      useFactory: async (configService: ConfigService) =>
        configService.get('typeorm'),
    }),
1 resposta

Olá, Fabio!

A mensagem de erro "No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command" que você está recebendo indica que o TypeORM não encontrou nenhuma alteração no esquema do banco de dados para gerar uma nova migração. Isso pode acontecer se você já executou todas as migrações pendentes ou se não houve nenhuma alteração no esquema do banco de dados desde a última migração.

Agora, analisando o comando que você executou: npm run migration:generate ./src/db/migrations/teste, parece que você está tentando passar um caminho de arquivo como argumento para o script migration:generate. No entanto, o comando migration:generate do TypeORM espera um nome de migração como argumento, e não um caminho de arquivo.

Então, você poderia tentar o seguinte comando:

npm run migration:generate -- -n NomeDaSuaMigracao

Onde NomeDaSuaMigracao é o nome que você quer dar para a migração. O TypeORM irá criar um arquivo de migração com esse nome no diretório especificado na sua configuração do TypeORM.

Além disso, verifique se as suas entidades estão sendo corretamente carregadas na sua configuração do TypeORM. A propriedade entities na sua configuração deve apontar para os arquivos de entidade corretos. No seu caso, parece que você está usando o seguinte padrão: [__dirname + '/../**/*.entity.{js,ts}']. Certifique-se de que esse padrão corresponde aos locais dos seus arquivos de entidade.

Por último, lembre-se de que você precisa fazer alterações no esquema do banco de dados (por exemplo, adicionar uma nova entidade ou alterar uma entidade existente) para que o comando migration:generate possa detectar as alterações e gerar uma nova migração.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software