Добавляю уже существующий проект в репозиторий GIT
This commit is contained in:
569
example_postgresql.py
Executable file
569
example_postgresql.py
Executable file
@@ -0,0 +1,569 @@
|
||||
#!/usr/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Примеры использования модуля postgresql.py новым способом
|
||||
Демонстрирует прямое использование PostgreSQLOperations без основного класса ssh
|
||||
"""
|
||||
import config
|
||||
from ssh_base import SSHBase
|
||||
from postgresql import PostgreSQLOperations
|
||||
|
||||
|
||||
def example_basic_usage():
|
||||
"""
|
||||
Пример базового использования модуля postgresql
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 1: Базовое использование модуля postgresql")
|
||||
print("=" * 60)
|
||||
|
||||
# Загружаем конфигурацию
|
||||
cfg = config.get_config()
|
||||
|
||||
# Создаем SSH подключение
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file'],
|
||||
host_keys=cfg['ssh']['host_keys']
|
||||
)
|
||||
|
||||
# Подключаемся
|
||||
ssh_client.connect()
|
||||
|
||||
# Создаем экземпляр модуля PostgreSQL
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
# Получаем список баз данных
|
||||
srv_pgsql = cfg['postgresql']['archive_server']
|
||||
bases = pg.bases_list(srv_pgsql)
|
||||
|
||||
print(f"Сервер PostgreSQL: {srv_pgsql}")
|
||||
print(f"Найдено баз данных: {len(bases)}")
|
||||
for base in bases[:5]: # Показываем первые 5
|
||||
print(f" - {base}")
|
||||
|
||||
# Закрываем соединение
|
||||
ssh_client.close()
|
||||
print("\n")
|
||||
|
||||
|
||||
def example_get_bases_list():
|
||||
"""
|
||||
Пример получения и вывода списка баз данных
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 2: Получение списка баз данных PostgreSQL")
|
||||
print("=" * 60)
|
||||
|
||||
cfg = config.get_config()
|
||||
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file']
|
||||
)
|
||||
ssh_client.connect()
|
||||
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
srv_pgsql = cfg['postgresql']['archive_server']
|
||||
|
||||
# Получаем список баз данных
|
||||
bases = pg.bases_list(srv_pgsql)
|
||||
|
||||
print(f"Сервер: {srv_pgsql}")
|
||||
print(f"Всего баз данных: {len(bases)}")
|
||||
print("\nСписок баз данных:")
|
||||
pg.bases_list_print(srv_pgsql)
|
||||
|
||||
ssh_client.close()
|
||||
print("\n")
|
||||
|
||||
|
||||
def example_get_bases_size():
|
||||
"""
|
||||
Пример получения размеров баз данных
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 3: Получение размеров баз данных PostgreSQL")
|
||||
print("=" * 60)
|
||||
|
||||
cfg = config.get_config()
|
||||
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file']
|
||||
)
|
||||
ssh_client.connect()
|
||||
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
srv_pgsql = cfg['postgresql']['archive_server']
|
||||
|
||||
print(f"Сервер: {srv_pgsql}")
|
||||
print("\nРазмеры баз данных:")
|
||||
print("-" * 60)
|
||||
print(f"{'База данных':<30} | Размер")
|
||||
print("-" * 60)
|
||||
pg.bases_size_print(srv_pgsql)
|
||||
|
||||
ssh_client.close()
|
||||
print("\n")
|
||||
|
||||
|
||||
def example_backup_single_base():
|
||||
"""
|
||||
Пример создания бэкапа одной базы данных
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 4: Создание бэкапа одной базы данных")
|
||||
print("=" * 60)
|
||||
|
||||
cfg = config.get_config()
|
||||
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file']
|
||||
)
|
||||
ssh_client.connect()
|
||||
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
srv_pgsql = cfg['postgresql']['archive_server']
|
||||
|
||||
# Получаем список баз и берем первую для примера
|
||||
bases = pg.bases_list(srv_pgsql)
|
||||
if bases:
|
||||
base_name = bases[0]
|
||||
print(f"Создание бэкапа базы данных: {base_name}")
|
||||
print(f"Сервер: {srv_pgsql}")
|
||||
|
||||
try:
|
||||
results = pg.bases_backup(srv_pgsql, base_name)
|
||||
for result in results:
|
||||
if result['success']:
|
||||
print(f"✓ Бэкап базы '{result['base']}' создан успешно")
|
||||
else:
|
||||
print(f"✗ Ошибка при создании бэкапа '{result['base']}': {result['stderr']}")
|
||||
except Exception as e:
|
||||
print(f"Ошибка: {e}")
|
||||
else:
|
||||
print("Базы данных не найдены")
|
||||
|
||||
ssh_client.close()
|
||||
print("\n")
|
||||
|
||||
|
||||
def example_backup_multiple_bases():
|
||||
"""
|
||||
Пример создания бэкапа нескольких баз данных из списка в конфиге
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 5: Создание бэкапа нескольких баз данных")
|
||||
print("=" * 60)
|
||||
|
||||
cfg = config.get_config()
|
||||
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file']
|
||||
)
|
||||
ssh_client.connect()
|
||||
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
srv_pgsql = cfg['postgresql']['archive_server']
|
||||
|
||||
# Получаем список баз из конфигурации для примеров
|
||||
bases_to_backup = cfg['migration'].get('bases', [])
|
||||
|
||||
if not bases_to_backup:
|
||||
print("Список баз для бэкапа не указан в конфигурации (migration.bases)")
|
||||
print("Используем все базы с сервера")
|
||||
bases_to_backup = None
|
||||
|
||||
print(f"Сервер: {srv_pgsql}")
|
||||
if bases_to_backup:
|
||||
print(f"Базы для бэкапа: {', '.join(bases_to_backup)}")
|
||||
else:
|
||||
print("Бэкап всех баз данных")
|
||||
|
||||
try:
|
||||
# Если указан список баз, создаем бэкап для каждой
|
||||
if bases_to_backup:
|
||||
for base_name in bases_to_backup:
|
||||
print(f"\nСоздание бэкапа базы: {base_name}")
|
||||
results = pg.bases_backup(srv_pgsql, base_name)
|
||||
for result in results:
|
||||
if result['success']:
|
||||
print(f" ✓ Бэкап базы '{result['base']}' создан успешно")
|
||||
else:
|
||||
print(f" ✗ Ошибка: {result['stderr']}")
|
||||
else:
|
||||
# Бэкап всех баз
|
||||
results = pg.bases_backup(srv_pgsql, None)
|
||||
print(f"\nОбработано баз: {len(results)}")
|
||||
successful = sum(1 for r in results if r['success'])
|
||||
failed = len(results) - successful
|
||||
print(f"Успешно: {successful}, Ошибок: {failed}")
|
||||
|
||||
for result in results:
|
||||
if not result['success']:
|
||||
print(f" ✗ Ошибка при бэкапе '{result['base']}': {result['stderr']}")
|
||||
except Exception as e:
|
||||
print(f"Ошибка: {e}")
|
||||
|
||||
ssh_client.close()
|
||||
print("\n")
|
||||
|
||||
|
||||
def example_backup_all_bases():
|
||||
"""
|
||||
Пример создания бэкапа всех баз данных
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 6: Создание бэкапа всех баз данных")
|
||||
print("=" * 60)
|
||||
|
||||
cfg = config.get_config()
|
||||
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file']
|
||||
)
|
||||
ssh_client.connect()
|
||||
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
srv_pgsql = cfg['postgresql']['archive_server']
|
||||
|
||||
print(f"Сервер: {srv_pgsql}")
|
||||
print("Создание бэкапа всех баз данных...")
|
||||
|
||||
try:
|
||||
result = pg.bases_backup_all(srv_pgsql)
|
||||
print("✓ Бэкап всех баз данных завершен успешно")
|
||||
except Exception as e:
|
||||
print(f"✗ Ошибка при создании бэкапа: {e}")
|
||||
|
||||
ssh_client.close()
|
||||
print("\n")
|
||||
|
||||
|
||||
def example_create_and_drop_base():
|
||||
"""
|
||||
Пример создания и удаления базы данных
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 7: Создание и удаление базы данных")
|
||||
print("=" * 60)
|
||||
|
||||
cfg = config.get_config()
|
||||
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file']
|
||||
)
|
||||
ssh_client.connect()
|
||||
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
srv_pgsql = cfg['postgresql']['restore_server']
|
||||
test_base_name = "test_base_example"
|
||||
|
||||
print(f"Сервер: {srv_pgsql}")
|
||||
print(f"Тестовая база: {test_base_name}")
|
||||
|
||||
try:
|
||||
# Создаем базу данных
|
||||
print("\n1. Создание базы данных...")
|
||||
pg.base_create(srv_pgsql, test_base_name)
|
||||
print(f"✓ База данных '{test_base_name}' создана")
|
||||
|
||||
# Проверяем, что база создана
|
||||
bases = pg.bases_list(srv_pgsql)
|
||||
if test_base_name in bases:
|
||||
print(f"✓ База '{test_base_name}' найдена в списке баз")
|
||||
|
||||
# Удаляем базу данных
|
||||
print("\n2. Удаление базы данных...")
|
||||
pg.base_drop(srv_pgsql, test_base_name)
|
||||
print(f"✓ База данных '{test_base_name}' удалена")
|
||||
|
||||
# Проверяем, что база удалена
|
||||
bases = pg.bases_list(srv_pgsql)
|
||||
if test_base_name not in bases:
|
||||
print(f"✓ База '{test_base_name}' отсутствует в списке баз")
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ Ошибка: {e}")
|
||||
|
||||
ssh_client.close()
|
||||
print("\n")
|
||||
|
||||
|
||||
def example_restore_base():
|
||||
"""
|
||||
Пример восстановления базы данных из бэкапа
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 8: Восстановление базы данных из бэкапа")
|
||||
print("=" * 60)
|
||||
|
||||
cfg = config.get_config()
|
||||
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file']
|
||||
)
|
||||
ssh_client.connect()
|
||||
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
archive_server = cfg['postgresql']['archive_server']
|
||||
restore_server = cfg['postgresql']['restore_server']
|
||||
backup_date = cfg['postgresql']['backup_date']
|
||||
extra = cfg['postgresql']['extra_backup']
|
||||
|
||||
# Используем первую базу из списка миграции
|
||||
archive_bases = cfg['migration']['archive_bases_name']
|
||||
restore_bases = cfg['migration']['restore_bases_name']
|
||||
|
||||
if archive_bases and restore_bases:
|
||||
for archive_base, restore_base in zip(archive_bases, restore_bases):
|
||||
print(f"Восстановление базы данных:")
|
||||
print(f" Архив: {archive_server}")
|
||||
print(f" База в архиве: {archive_base}")
|
||||
print(f" Сервер восстановления: {restore_server}")
|
||||
print(f" База для восстановления: {restore_base}")
|
||||
print(f" Дата бэкапа: {backup_date}")
|
||||
print(f" Экстра-бэкап: {extra}")
|
||||
|
||||
try:
|
||||
# Сначала удаляем старую базу, если существует
|
||||
print(f"\n1. Удаление старой базы '{restore_base}' (если существует)...")
|
||||
try:
|
||||
pg.base_drop(restore_server, restore_base)
|
||||
print(f" ✓ Старая база удалена")
|
||||
except Exception:
|
||||
print(f" База не существует или уже удалена")
|
||||
|
||||
# Создаем новую базу
|
||||
print(f"\n2. Создание новой базы '{restore_base}'...")
|
||||
pg.base_create(restore_server, restore_base)
|
||||
print(f" ✓ База создана")
|
||||
|
||||
# Восстанавливаем из бэкапа
|
||||
print(f"\n3. Восстановление из бэкапа...")
|
||||
pg.base_restore(
|
||||
archive_server, restore_server, backup_date,
|
||||
archive_base, restore_base, extra
|
||||
)
|
||||
print(f" ✓ База '{restore_base}' восстановлена успешно")
|
||||
|
||||
except Exception as e:
|
||||
print(f" ✗ Ошибка при восстановлении: {e}")
|
||||
|
||||
ssh_client.close()
|
||||
print("\n")
|
||||
|
||||
|
||||
def example_manage_backups():
|
||||
"""
|
||||
Пример управления старыми бэкапами
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 9: Управление старыми бэкапами")
|
||||
print("=" * 60)
|
||||
|
||||
cfg = config.get_config()
|
||||
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file']
|
||||
)
|
||||
ssh_client.connect()
|
||||
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
srv_pgsql = cfg['postgresql']['archive_server']
|
||||
backup_path = f'/backup/pgsql/{srv_pgsql}'
|
||||
days_old = 30 # Удалять бэкапы старше 30 дней
|
||||
|
||||
print(f"Путь к бэкапам: {backup_path}")
|
||||
print(f"Удаление бэкапов старше: {days_old} дней")
|
||||
|
||||
try:
|
||||
# Получаем список старых директорий
|
||||
print("\n1. Поиск старых бэкапов...")
|
||||
old_dirs = pg.file_list(backup_path, days_old)
|
||||
if old_dirs.strip():
|
||||
dirs_list = [d.strip() for d in old_dirs.split('\n') if d.strip()]
|
||||
print(f"Найдено директорий для удаления: {len(dirs_list)}")
|
||||
for d in dirs_list[:5]: # Показываем первые 5
|
||||
print(f" - {d}")
|
||||
else:
|
||||
print("Старые бэкапы не найдены")
|
||||
|
||||
# Удаляем старые бэкапы
|
||||
print(f"\n2. Удаление бэкапов старше {days_old} дней...")
|
||||
pg.delete_old_backups(backup_path, days_old)
|
||||
print("✓ Удаление завершено")
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ Ошибка: {e}")
|
||||
|
||||
ssh_client.close()
|
||||
print("\n")
|
||||
|
||||
|
||||
def example_full_workflow():
|
||||
"""
|
||||
Пример полного рабочего процесса: список -> размеры -> бэкап
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 10: Полный рабочий процесс")
|
||||
print("=" * 60)
|
||||
|
||||
cfg = config.get_config()
|
||||
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file']
|
||||
)
|
||||
ssh_client.connect()
|
||||
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
srv_pgsql = cfg['postgresql']['archive_server']
|
||||
|
||||
try:
|
||||
# Шаг 1: Получаем список баз
|
||||
print("Шаг 1: Получение списка баз данных...")
|
||||
bases = pg.bases_list(srv_pgsql)
|
||||
print(f" Найдено баз: {len(bases)}")
|
||||
|
||||
# Шаг 2: Получаем размеры баз
|
||||
print("\nШаг 2: Получение размеров баз данных...")
|
||||
sizes = pg.bases_size(srv_pgsql)
|
||||
print(f" Получены размеры для {len(sizes)} баз")
|
||||
for size_info in sizes[:3]: # Показываем первые 3
|
||||
base_name = size_info[0]
|
||||
size = ''.join(size_info[1]) if size_info[1] else 'N/A'
|
||||
print(f" {base_name}: {size}")
|
||||
|
||||
# Шаг 3: Создаем бэкап первой базы (если есть)
|
||||
if bases:
|
||||
print(f"\nШаг 3: Создание бэкапа базы '{bases[0]}'...")
|
||||
results = pg.bases_backup(srv_pgsql, bases[0])
|
||||
for result in results:
|
||||
if result['success']:
|
||||
print(f" ✓ Бэкап создан успешно")
|
||||
else:
|
||||
print(f" ✗ Ошибка: {result['stderr']}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ошибка: {e}")
|
||||
finally:
|
||||
ssh_client.close()
|
||||
|
||||
print("\n")
|
||||
|
||||
|
||||
def example_context_manager_style():
|
||||
"""
|
||||
Пример использования с обработкой ошибок
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Пример 11: Использование с обработкой ошибок")
|
||||
print("=" * 60)
|
||||
|
||||
cfg = config.get_config()
|
||||
ssh_client = None
|
||||
|
||||
try:
|
||||
ssh_client = SSHBase(
|
||||
hostname=cfg['ssh']['hostname'],
|
||||
port=cfg['ssh']['port'],
|
||||
username=cfg['ssh']['username'],
|
||||
pkey_file=cfg['ssh']['pkey_file']
|
||||
)
|
||||
ssh_client.connect()
|
||||
|
||||
pg = PostgreSQLOperations(ssh_client)
|
||||
|
||||
srv_pgsql = cfg['postgresql']['archive_server']
|
||||
|
||||
# Получаем список баз и их размеры
|
||||
bases = pg.bases_list(srv_pgsql)
|
||||
print(f"Сервер: {srv_pgsql}")
|
||||
print(f"Найдено баз данных: {len(bases)}")
|
||||
|
||||
if bases:
|
||||
print("\nПервые 5 баз данных:")
|
||||
for base in bases[:5]:
|
||||
print(f" - {base}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Произошла ошибка: {e}")
|
||||
finally:
|
||||
if ssh_client:
|
||||
ssh_client.close()
|
||||
print("\nСоединение закрыто")
|
||||
|
||||
print("\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("\n" + "=" * 60)
|
||||
print("Примеры использования модуля postgresql.py")
|
||||
print("=" * 60 + "\n")
|
||||
|
||||
# Раскомментируйте нужные примеры для запуска
|
||||
|
||||
# example_basic_usage()
|
||||
example_get_bases_list()
|
||||
# example_get_bases_size()
|
||||
# example_backup_single_base()
|
||||
# example_backup_multiple_bases()
|
||||
# example_backup_all_bases()
|
||||
# example_create_and_drop_base()
|
||||
# example_restore_base()
|
||||
# example_manage_backups()
|
||||
# example_full_workflow()
|
||||
# example_context_manager_style()
|
||||
|
||||
print("Для запуска примеров раскомментируйте соответствующие функции в конце файла")
|
||||
print("\nПримеры демонстрируют:")
|
||||
print(" 1. Базовое использование модуля")
|
||||
print(" 2. Получение списка баз данных")
|
||||
print(" 3. Получение размеров баз данных")
|
||||
print(" 4. Создание бэкапа одной базы")
|
||||
print(" 5. Создание бэкапа нескольких баз из конфига")
|
||||
print(" 6. Создание бэкапа всех баз")
|
||||
print(" 7. Создание и удаление базы данных")
|
||||
print(" 8. Восстановление базы из бэкапа")
|
||||
print(" 9. Управление старыми бэкапами")
|
||||
print(" 10. Полный рабочий процесс")
|
||||
print(" 11. Использование с обработкой ошибок")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user