```sql
CREATE TABLE t
(
   id Int64, 
   d String,
   p Map(String, String)
   
)
ENGINE = ReplacingMergeTree order by id settings index_granularity  = 0;


insert into t values (1,  's', {'a':'b'});

CH starts eating RAM until it crashes

the same with

insert into t select 1,  's', map('a','b');

```

checkPartDuplicate(part, out_transaction, lock);
    PartHierarchy hierarchy = getPartHierarchy(part->info, DataPartState::Active, lock);
    if (!hierarchy.intersected_parts.empty())
    {
        String message = fmt::format("Part {} intersects part {}", part->name, hierarchy.intersected_parts.back()->getNameWithState());
        
        
        
        if (part->isEmpty() || (hierarchy.intersected_parts.size() == 1 && hierarchy.intersected_parts.back()->isEmpty()))
        {
            message += fmt::format(" One of them is empty part. That is a race between drop operation under transaction and a merge/mutation.");
            throw Exception(message, ErrorCodes::SERIALIZATION_ERROR);
        }
        if (hierarchy.intersected_parts.size() > 1)
            message += fmt::format(" There are {} intersected parts.", hierarchy.intersected_parts.size());
        throw Exception(ErrorCodes::LOGICAL_ERROR, message + " It is a bug.");
    }
    if (part->hasLightweightDelete())
        has_lightweight_delete_parts.store(true);
    
    
    preparePartForCommit(part, out_transaction,  true);
    if (out_covered_parts)
    {
        out_covered_parts->reserve(out_covered_parts->size() + hierarchy.covered_parts.size());
        std::move(hierarchy.covered_parts.begin(), hierarchy.covered_parts.end(), std::back_inserter(*out_covered_parts));
    }
    return true;
}
bool MergeTreeData::renameTempPartAndReplaceUnlocked(