**Describe the unexpected behaviour**
The lightweight delete feature implementation causes server side segfault when table is created with a `_row_exists` column.

**How to reproduce**
Tested on ~~master branch (commit `74ffb8438`)~~ tag `v22.8.5.29-lts`.

Edit: WARNING: be careful when testing, the created table cannot be dropped from CH!

```
CREATE TABLE test(
    whatever String,
    _row_exists String
)
ENGINE = MergeTree()
ORDER BY whatever;  -- Works

INSERT INTO test values('1', '1');  -- Still works

SELECT * FROM test;  -- Fails in client, sometimes segfault in server?

DROP TABLE test; -- Client hangs for a while, then exits, segfault in server
```

**Expected behavior**
If it is not possible to use tables with explicitly created `_row_exists` column, the create statement should raise an error, and this restriction should be documented IMHO. (It would be a nice feature if the column name containing the delete mask could be specified in the MergeTree parameters upon table creation, defaulting to `_row_exists`.)

**Error message and/or stacktrace**
Failure message in client after `SELECT`:
```
Received exception from server (version 22.8.5):
Code: 352. DB::Exception: Received from localhost:9000. DB::Exception: Block structure mismatch in (columns with identical name must have identical structure) stream: different types:
_row_exists String String(size = 1)
_row_exists UInt8 UInt8(size = 1): While executing MergeTreeInOrder. (AMBIGUOUS_COLUMN_NAME)
```

Error message in server after `SELECT`:
```
2022.09.23 10:17:31.352611 [ 306928 ] {6906df8e-36b2-4ec3-9012-3f1faaa00fc3} <Error> executeQuery: Code: 352. DB::Exception: Block structure mismatch in (columns with identical name must have identical structure) stream: different types:
_row_exists String String(size = 1)
_row_exists UInt8 UInt8(size = 1): While executing MergeTreeThread. (AMBIGUOUS_COLUMN_NAME) (version 22.8.5.1) (from [::1]:34452) (in query: select * from test;), Stack trace (when copying this message, always include the lines below):

0. /home/clickhouse/build/./contrib/libcxx/include/exception:133: Poco::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0x183f3aac in /home/clickhouse/build/programs/clickhouse
1. /home/clickhouse/build/./src/Common/Exception.cpp:69: DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x1035f348 in /home/clickhouse/build/programs/clickhouse
2. /home/clickhouse/build/./src/Core/Block.cpp:36: void DB::checkColumnStructure<void>(DB::ColumnWithTypeAndName const&, DB::ColumnWithTypeAndName const&, std::__1::basic_string_view<char, std::__1::char_traits<char> >, bool, int) @ 0x1471e8cb in /home/clickhouse/build/programs/clickhouse
3. /home/clickhouse/build/./contrib/libcxx/include/vector:1575: DB::Block::insert(DB::ColumnWithTypeAndName) @ 0x1471f094 in /home/clickhouse/build/programs/clickhouse
4. /home/clickhouse/build/./contrib/libcxx/include/string:1445: DB::MergeTreeBaseSelectProcessor::injectVirtualColumns(DB::Block&, unsigned long, DB::MergeTreeReadTask*, std::__1::shared_ptr<DB::IDataType const> const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) @ 0x1641590e in /home/clickhouse/build/programs/clickhouse
5. /home/clickhouse/build/./src/Storages/MergeTree/MergeTreeBaseSelectProcessor.cpp:216: DB::MergeTreeBaseSelectProcessor::generate() @ 0x16414dbd in /home/clickhouse/build/programs/clickhouse
6. /home/clickhouse/build/./src/Processors/Chunk.h:90: DB::ISource::tryGenerate() @ 0x160ee323 in /home/clickhouse/build/programs/clickhouse
7. /home/clickhouse/build/./contrib/libcxx/include/optional:321: DB::ISource::work() @ 0x160edf92 in /home/clickhouse/build/programs/clickhouse
8. /home/clickhouse/build/./src/Processors/Executors/ExecutionThreadContext.cpp:0: DB::ExecutionThreadContext::executeTask() @ 0x16107bc0 in /home/clickhouse/build/programs/clickhouse
9. /home/clickhouse/build/./src/Processors/Executors/PipelineExecutor.cpp:228: DB::PipelineExecutor::executeStepImpl(unsigned long, std::__1::atomic<bool>*) @ 0x160fdcba in /home/clickhouse/build/programs/clickhouse
10. /home/clickhouse/build/./src/Processors/Executors/PipelineExecutor.cpp:0: void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<ThreadFromGlobalPool::ThreadFromGlobalPool<DB::PipelineExecutor::spawnThreads()::$_0>(DB::PipelineExecutor::spawnThreads()::$_0&&)::'lambda'(), void ()> >(std::__1::__function::__policy_storage const*) @ 0x160ff1fe in /home/clickhouse/build/programs/clickhouse
11. /home/clickhouse/build/./contrib/libcxx/include/__functional/function.h:832: ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x103f435f in /home/clickhouse/build/programs/clickhouse
12. /home/clickhouse/build/./contrib/libcxx/include/__memory/unique_ptr.h:312: void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void ThreadPoolImpl<std::__1::thread>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()> >(void*) @ 0x103f67c0 in /home/clickhouse/build/programs/clickhouse
13. ? @ 0x7efea9f4078d in ?
14. clone @ 0x7efea9fc18e4 in ?
```

Failure message in client after `DROP`:
```
Exception on client:
Code: 32. DB::Exception: Attempt to read after eof: while receiving packet from localhost:9000. (ATTEMPT_TO_READ_AFTER_EOF)

Connecting to localhost:9000 as user default.
Code: 210. DB::NetException: Connection refused (localhost:9000). (NETWORK_ERROR)
```

Server after `SELECT` / `DROP`:
```
Segmentation fault (core dumped)
```

**Additional context**
Tested on ~~master branch (commit `74ffb8438`)~~ `v22.8.5.29-lts`.
interpreter.execute();
        }
        else
            throw Exception(storage_already_exists_error_code,
                "{} {}.{} already exists", storage_name, backQuoteIfNeed(create.getDatabase()), backQuoteIfNeed(create.getTable()));
    }
    else if (!create.attach)
    {
        
        try
        {
            database->checkMetadataFilenameAvailability(create.getTable());
        }
        catch (const Exception &)
        {
            if (create.if_not_exists)
                return false;
            throw;
        }
    }
    data_path = database->getTableDataPath(create);
    if (!create.attach && !data_path.empty() && fs::exists(fs::path{getContext()->getPath()} / data_path))
        throw Exception(storage_already_exists_error_code,
            "Directory for {} data {} already exists", Poco::toLower(storage_name), String(data_path));
    bool from_path = create.attach_from_path.has_value();
    String actual_data_path = data_path;
    if (from_path)
    {
        if (data_path.empty())
            throw Exception(ErrorCodes::NOT_IMPLEMENTED,