I tried to rename a key column in a MergeTree table. It does not work, and 20.4 is very clear about the reason. 
20.5.2 is complaining about non-existing column with the old name, suggesting there is a column with the new name:
```
ALTER TABLE rename_key
    RENAME COLUMN key TO new

Received exception from server (version 20.4.6):
Code: 44. DB::Exception: Received from localhost:9000. 
DB::Exception: Trying to ALTER RENAME key key column which is a part of key expression.

Received exception from server (version 20.5.2):
Code: 47. DB::Exception: Received from localhost:9000. 
DB::Exception: Missing columns: 'key' while processing query: 'key', required columns: 'key', source columns: 'value' 'new' 'date'.
```
The message hasn't changed for the partition key:
```
ALTER TABLE rename_key
    RENAME COLUMN date TO new

Received exception from server (version 20.4.6):
Code: 44. DB::Exception: Received from localhost:9000. 
DB::Exception: Trying to ALTER RENAME key date column which is a part of key expression.

Received exception from server (version 20.5.2):
Code: 524. DB::Exception: Received from localhost:9000. 
DB::Exception: Trying to ALTER RENAME key date column which is a part of key expression.
```
The table:
```
CREATE TABLE rename_key
(
    `date` Date,
    `key` UInt64,
    `value` String
)
ENGINE = MergeTree()
PARTITION BY date
ORDER BY key
```

{
    if (from->equals(*to))
        return true;
    static const std::unordered_multimap<std::type_index, const std::type_info &> ALLOWED_CONVERSIONS =
        {
            { typeid(DataTypeEnum8),    typeid(DataTypeEnum8)    },
            { typeid(DataTypeEnum8),    typeid(DataTypeInt8)     },
            { typeid(DataTypeEnum16),   typeid(DataTypeEnum16)   },
            { typeid(DataTypeEnum16),   typeid(DataTypeInt16)    },
            { typeid(DataTypeDateTime), typeid(DataTypeUInt32)   },
            { typeid(DataTypeUInt32),   typeid(DataTypeDateTime) },
            { typeid(DataTypeDate),     typeid(DataTypeUInt16)   },
            { typeid(DataTypeUInt16),   typeid(DataTypeDate)     },
        };
    while (true)
    {
        auto it_range = ALLOWED_CONVERSIONS.equal_range(typeid(*from));
        for (auto it = it_range.first; it != it_range.second; ++it)
        {
            if (it->second == typeid(*to))
                return true;
        }
        const auto * arr_from = typeid_cast<const DataTypeArray *>(from);
        const auto * arr_to = typeid_cast<const DataTypeArray *>(to);
        if (arr_from && arr_to)
        {
            from = arr_from->getNestedType().get();
            to = arr_to->getNestedType().get();