## Требования
* Свободное место на диске. Перед миграцией скрипт сам считает необходимый объём
  и сравнивает его с доступным на корневом разделе (`df -BG /`). Формула:

  ```
  required = 1.5 * size(PostgreSQL) + 2 * size(ClickHouse) + 512 МБ
  ```

  Множители учитывают реальные накладные расходы:
  * `1.5x` для PostgreSQL — `pg_dump --format=c` сжимает дамп (~0.5x исходного размера) и параллельно с ним на диске лежит восстановленная БД (~1x).
  * `2x` для ClickHouse — `BACKUP TO Disk('backups', '*.zip')` почти не сжимает (данные уже сжаты в партах) (~1x), плюс восстановленная БД (~1x).
  * `512 МБ` — буфер на метаданные и временные файлы.

  Размеры исходных БД скрипт получает сам:
  * PostgreSQL — `SELECT pg_database_size('<psql_db_name_from>')`
  * ClickHouse — `SELECT sum(total_bytes) FROM system.tables WHERE database = '<ch_db_name_from>'`
* Запущенные сервисы PostgreSQL и ClickHouse, доступные по указанным ниже кредам
  (используются как для миграции, так и для предварительного подсчёта размера БД).
  Исходные БД (`psql_db_name_from`, `ch_db_name_from`) должны существовать — иначе скрипт упадёт ещё до запуска миграции.
* Стабильное интернет-соединение

## Использование
```bash
sudo bash migrate.sh [--psql-docker-name <container_name>] <host> <user> <password> <psql_db_name_from> <psql_db_name_to> <psql_port> <ch_def_user_password> <ch_db_name_from> <ch_db_name_to> <ch_port> [<license>]
```
* `--psql-docker-name <container_name>` — необязательный флаг: имя Docker-контейнера, в котором запущен PostgreSQL. Используется для дистрибутивов (например, Astra Linux), где в репозитории отсутствует нужная версия PostgreSQL и БД поднята в Docker. При указании флага `pg_dump` и `pg_restore` выполняются внутри контейнера через `docker exec`, что обходит несовместимость клиентских утилит хоста с версией сервера.
* host — ip-адрес хоста, на котором стоят сервисы Clickhouse и PostgreSQL (допустимо указать localhost вместо 0.0.0.0)
* user — имя пользователя, который будет использоваться в базах, либо создан, если еще не существует
* password — пароль пользователя
* psql_db_name_from — имя PSQL БД, из которой будет совершена миграция
* psql_db_name_to — имя PSQL БД, в которую будет совершена миграция
* psql_port — порт сервиса PostgreSQL на хосту из параметра [host]
* ch_def_user_password — пароль дефолтного (default) пользователя Clickhouse
* ch_db_name_from — имя Clickhouse БД, из которой будет совершена миграция
* ch_db_name_to — имя Clickhouse БД, в которую будет совершена миграция
* ch_port — порт сервиса Clickhouse на хосту из параметра [host]
* license — флаг для миграции c лицензией, необязательный (по умолчанию true — с лицензией)
