# Databases

Базы данных

# Postgres database dump and restore

В этой короткой инструкции описывается как сделать бэкап базы данных PostgreSQL и восстановить его (на другом сервере);

Предполагается что PostgreSQL развёрнута в docker контейнере.

#### Dump

! Осторожно, если для докер-контейнера с БД не настроен volume который сохраняет состояние базы данных при перезапуске контейнера, то есть шанс потерять всё. (Но надюсь он настроен, потому что иначе жить нельзя).

Для начала добавьте в `docker-compose.yml` в раздел volumes новый volume чтобы было удобно забрать с сервера дамп базы данных.
```yaml
  volumes:
    - ./dumps/:/dumps/
```

Преезапустите контейнер:
```bash
docker compose down
docker compose up -d
```

Войдите внутрь контейнера с помощью команды (Выйти из контейнера: `ctrl+d`):
```bash
docker exec -it postgres_db bash
```
Сделайте дамп вашей базы данных
```bash
pg_dump database_name > dumps/db.sql
```

#### Перенос

**Старый сервер.** Файл будет создан в примонтированной директории `dumps`. Перенос файла дампа на новый сервер можно выполнить любым удобным способом, scp или winSCP (GUI для scp).

**Новый сервер.** Проделайте те же действия с `docker-compose.yml` для создания volume и перезапустите контейнер. В директории рядом с `docker-compose.yml` должна создастся папка `dumps`. Перенесите файл дампа туда.

#### Restore

Войдите внутрь контейнера с помощью команды (Выйти из контейнера: `ctrl+d`):
```bash
docker exec -it postgres_db bash
```

Тут существует два варианта.
* Вариант 1. Если база данных чистая, то выполните команду:
  ```bash
  psql -d database_name < dumps/db.sql
  ```
* Вариант 2. Если база данных не чистая или вы сделали что-то не так и psql не даёт восстановить из дампа. Самый простой способ дропнуть базу и создать её заного.
  ```bash
  psql -c "DROP DATABASE database_name;"
  psql -c "CREATE DATABASE database_name;"
  ```
  После чего загрузите базу данных из дампа:
  ```bash
  psql -d database_name < dumps/db.sql
  ```

Поздравляю, вы великолепны!

# DB Zoo

![databases.jpg](https://notes.annndruha.space/attachments/23)