Just the first row can be inserted by insert_many(). The database I uesd is postgresql
I'm not sure what to tell you, but I've added a (passing) unit-test which shows that this is working correctly in my test setup. If you can provide me a minimal failing test-case I will re-examine, but I think the problem is not with Peewee.
The model is

        class DbTick(Model):
            instrument_id: str = CharField() 
            datetime: datetime = DateTimeField() 

            bid_price1: float = FloatField()
            bid_price2: float = FloatField(null=True)
            bid_price3: float = FloatField(null=True)
            bid_price4: float = FloatField(null=True)
            bid_price5: float = FloatField(null=True)

            ask_price1: float = FloatField()
            ask_price2: float = FloatField(null=True)
            ask_price3: float = FloatField(null=True)
            ask_price4: float = FloatField(null=True)
            ask_price5: float = FloatField(null=True)

            bid_volume1: float = FloatField()
            bid_volume2: float = FloatField(null=True)
            bid_volume3: float = FloatField(null=True)
            bid_volume4: float = FloatField(null=True)
            bid_volume5: float = FloatField(null=True)

            ask_volume1: float = FloatField()
            ask_volume2: float = FloatField(null=True)
            ask_volume3: float = FloatField(null=True)
            ask_volume4: float = FloatField(null=True)
            ask_volume5: float = FloatField(null=True)

            last_price: float = FloatField() 
            highest: float = FloatField() 
            lowest: float = FloatField() 
            open: float = FloatField()
            close: float = FloatField()
            average: float = FloatField()

            volume: float = FloatField()
            amount: float = FloatField()
            open_interest: float = FloatField() 

            upper_limit: float = FloatField()
            lower_limit: float = FloatField() 

            pre_open_interest: float = FloatField() 
            pre_settlement: float = FloatField()
            pre_close: float = FloatField() 

            price_tick: float = FloatField() 
            volume_multiple: int = IntegerField() 
            ins_class: str = CharField()
            expire_datetime: datetime = DateTimeField() 
            expired: int = IntegerField() 

            class Meta:
                database = db
                primary_key = CompositeKey('instrument_id', 'datetime')  

And I insert data by the method insert_many(),

        with self.db.atomic() as transaction: 
            for batch in chunked(ticks, 100): 
                 self.DbTick.insert_many(batch).on_conflict_ignore().execute()

The result is that only the first row in the ticks can be inserted. This code is wrapped in a coroutine.

Thanks for helping