> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Движок баз данных Overlay предоставляет доступ к объединению таблиц из нескольких существующих баз данных.

# Overlay

Движок баз данных `Overlay` предоставляет доступ к объединению таблиц из нескольких существующих баз данных.

<h2 id="creating-a-database">
  Создание базы данных
</h2>

```sql theme={null}
CREATE DATABASE overlay_db
ENGINE = Overlay(db1[, db2, ...]);
```

Имя таблицы ищется в исходных базах данных в том порядке, в котором они перечислены: используется первая база данных, в которой есть таблица с таким именем.

Сама база данных не содержит собственных таблиц. Каждая таблица оверлейной базы данных ведёт себя как таблица [`Alias`](/docs/ru/reference/engines/table-engines/special/alias), ссылающаяся на таблицу исходной базы данных: чтение и запись выполняются в исходной таблице.
Операции `CREATE`, `DROP`, `RENAME`, `ATTACH` и `DETACH` над таблицами внутри оверлейной базы данных не поддерживаются.

Исходные базы данных разрешаются по имени при каждом обращении: если исходную базу данных удалить, её таблицы исчезают из оверлейной базы данных, а после её повторного создания появляются снова.
База данных `Overlay` не может использоваться в качестве исходной для другой базы данных `Overlay`.

<h2 id="access-control">
  Управление доступом
</h2>

Как и в случае с таблицей `Alias`, для работы с таблицей оверлейной базы данных требуются привилегии как на оверлейную базу данных, так и на исходную таблицу, при этом действуют ROW POLICY обеих.
Таблица оверлейной базы данных видна только тому пользователю, который видит и оверлейную базу данных, и исходную таблицу (то есть имеет привилегию `SHOW TABLES` на обе).
Имя разрешается в первой исходной базе данных, в которой пользователю видна таблица с таким именем: скрытая от пользователя таблица пропускается, как если бы её не существовало.

<h2 id="example">
  Пример
</h2>

```sql theme={null}
CREATE DATABASE db1;
CREATE DATABASE db2;
CREATE TABLE db1.a (x UInt8) ENGINE = Memory;
CREATE TABLE db2.b (y String) ENGINE = Memory;
INSERT INTO db2.b VALUES ('Hello');
CREATE DATABASE overlay_db ENGINE = Overlay(db1, db2);
SELECT name, engine FROM system.tables WHERE database = 'overlay_db' ORDER BY name;
SELECT * FROM overlay_db.b;
```

```response theme={null}
┌─name─┬─engine─┐
│ a    │ Alias  │
│ b    │ Alias  │
└──────┴────────┘
┌─y─────┐
│ Hello │
└───────┘
```
