Восстановление сервера PostgreSQL 9.6 после сбоя кластера может быть сложной задачей, особенно в вашем случае, когда роль `postgres` не существует, и вы сталкиваетесь с различными ошибками. Вот несколько шагов, которые вы можете предпринять, чтобы попытаться восстановить структуру схем, таблиц, функций и триггеров:
### 1. Переинициализация кластера
Если данные не столь важны, вы можете переинициализировать кластер PostgreSQL. Это можно сделать, но перед этим вам нужно сохранить все важные метаданные. Чтобы переинициализировать кластер, выполните следующие шаги:
1. **Создайте резервную копию папки `main`:**
```bash
cp -r /etc/postgresql/9.6/main /etc/postgresql/9.6/main_backup
```
2. **Переинициализируйте кластер:**
```bash
sudo -u postgres /usr/lib/postgresql/9.6/bin/initdb -D /etc/postgresql/9.6/main
```
3. **Запустите сервер:**
```bash
sudo systemctl start postgresql
```
Это создаст базу данных по умолчанию и роль `postgres`.
### 2. Восстановление схем и таблиц
Если у вас есть доступ к старому кластеру (или вы переносили его на другую машину), вы можете попробовать выполнить следующие команды, чтобы попытаться восстановить схемы и структуры:
1. **Экспортируйте схемы из последнего валидного состояния:**
Если у вас есть доступ к данным и метаданным на старом сервере, попробуйте использовать `pg_dump` для экспорта схем:
```bash
sudo -u postgres pg_dump -s -d your_database_name > schema_backup.sql
```
Этот файл будет содержать только структуру базы данных (сказую, таблицы, функции и триггеры).
2. **Импортируйте схемы в новую базу:**
Перенесите файл `schema_backup.sql` на новый сервер и загрузите его:
```bash
sudo -u postgres psql -d postgres -f schema_backup.sql
```
### 3. Восстановление данных, если необходимо
Если откат и экспорт схем не сработали, но данные не столь важны, подумайте о пересоздании необходимых таблиц и структур вручную с нуля. Вы также можете использовать old main для поиска конкретных SQL-скриптов, которые вы использовали для создания ваших таблиц и схем.
### 4. Восстановление из pg_basebackup
Если у вас есть бэкап, сделанный с помощью `pg_basebackup`, вы также можете восстановить сервер из него. Пример команды для восстановления:
```bash
pg_basebackup -D /var/lib/postgresql/9.6/main -Fp -Xs -P
```
### Основные вещи, которые стоит помнить:
- Всегда создавайте резервные копии перед выполнением операций, которые могут повредить данные или конфигурацию.
- Проверьте правильность установленных переменных окружения и конфигурации сервера.
- Если вы имеете возможность, обязательно найдите способ получить доступ к логам, чтобы лучше понять причину сбоя.
### Завершение
Если ни один из этих шагов не помогает или вызывает дополнительные проблемы, подумайте о том, чтобы обратиться к специалистам по PostgreSQL для более глубокой диагностики и решения вашей проблемы.