Búsqueda de sitios web

typescript - ¿Cómo configurar TypeORM en NestJS para usar replicación de postgres?


He configurado la replicación para la base de datos Postgres en AWS. Cómo configurar TypeORM para usar réplicas de lectura/escritura en NestJs.

Mi código actual se ve así. Cómo convertir esta conexión múltiple para usar replicaciones.

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: '127.0.0.1',
      port: 5432,
      username: 'user1',
      password: 'pass1',
      database: 'user1',
      synchronize: true,
      entities: ['src/**/*.entity{.ts,.js}'],
      migrations: ['./src/migrations/*.ts'],
    }),
    TypeOrmModule.forRoot({
      type: 'postgres',
      name: 'read',
      host: '127.0.0.2',
      port: 5432,
      username: 'user2',
      password: 'pass2',
      database: 'user2',
      entities: ['src/**/*.entity{.ts,.js}'],
     migrations: ['./src/migrations/*.ts'],
   })
  ],
  controllers: [HealthCheckController],
  providers: [],
})
export class AppModule {}

usuario.módulo.ts

@Module({
  imports: [
    TypeOrmModule.forFeature([UserEntity]),
  ],
  exports: [],
  controllers: [UserController],
})
export class UserModule {}

usuario.servicio.ts

@Injectable()
export class OnboardingService {
  private readonly logger: Logger = new Logger(UserService.name);

  public constructor(
    @InjectRepository(UserEntity)
    private readonly userEntityRepository: Repository<UserEntity>,
    @InjectConnection()
    private readonly connection: Connection,
  ) {}

¿Cómo usar la conexión esclavo/maestro en el archivo user.service.ts?

Respuesta #1

Para configurar los ajustes de conexión de replicación, puedes hacer:

 @Module({
 imports: [TypeOrmModule.forRoot({
    type: 'postgres',
    replication: {
      master: {
      host: '127.0.0.1',
      port: 5432,
      username: 'user1',
      password: 'pass1',
      database: 'user1',
      },
      slaves: [{
        host: '127.0.0.2',
        port: 5432,
        username: 'user2',
        password: 'pass2',
        database: 'user2',
      }]
    },
    entities: ['src/**/*.entity{.ts,.js}'],
    migrations: ['./src/migrations/*.ts'],
    synchronize: true,
})],
  controllers: [HealthCheckController],
  providers: [],
})
export class AppModule {}

Para más información, puedes consultar: typeorm Replication

Artículos relacionados