# Миграция с MySQL на PostgreSQL

## Обзор изменений

Проект был переведен с MySQL на PostgreSQL для улучшения производительности и функциональности.

### Что изменилось:

1. **Зависимости**: заменены `aiomysql` и `pymysql` на `asyncpg` и `psycopg2-binary`
2. **Подключение**: обновлена строка подключения с `mysql+aiomysql://` на `postgresql+asyncpg://`
3. **Типы данных**: MySQL-специфичные типы заменены на универсальные SQLAlchemy типы
4. **Конфигурация**: добавлены переменные окружения `POSTGRES_*`

## Быстрая установка (новый проект)

### 1. Установка PostgreSQL и зависимостей

```bash
# Сделать скрипт исполняемым
chmod +x install_postgres.sh

# Запустить установку
sudo ./install_postgres.sh
```

### 2. Настройка переменных окружения

Создайте файл `.env` в корне проекта:

```env
# PostgreSQL
POSTGRES_USER=bot
POSTGRES_PASSWORD=your_secure_password
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DATABASE=vpn_shop

# Bot Token
BOT_TOKEN=your_bot_token_here
```

## Миграция с существующего MySQL

### 1. Установка PostgreSQL

```bash
sudo apt-get update
sudo apt-get install -y postgresql postgresql-contrib
```

### 2. Создание пользователя и базы данных

```bash
sudo -u postgres psql
```

```sql
CREATE USER bot WITH PASSWORD 'secret';
CREATE DATABASE vpn_shop OWNER bot;
GRANT ALL PRIVILEGES ON DATABASE vpn_shop TO bot;
\q
```

### 3. Установка новых зависимостей

```bash
pip install asyncpg psycopg2-binary
pip uninstall aiomysql pymysql
```

### 4. Создание таблиц в PostgreSQL

```bash
python3 database/init_postgres.py
```

### 5. Миграция данных

```bash
python3 database/migrate_mysql_to_postgres.py
```

### 6. Обновление .env файла

Добавьте переменные PostgreSQL в ваш `.env`:

```env
# PostgreSQL (новые переменные)
POSTGRES_USER=bot
POSTGRES_PASSWORD=secret
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DATABASE=vpn_shop

# MySQL (временно для миграции)
MYSQL_USER=bot
MYSQL_PASSWORD=secret
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_DATABASE=vpn_shop
```

## Основные различия

### Переменные окружения

| MySQL | PostgreSQL |
|-------|------------|
| `MYSQL_USER` | `POSTGRES_USER` |
| `MYSQL_PASSWORD` | `POSTGRES_PASSWORD` |
| `MYSQL_HOST` | `POSTGRES_HOST` |
| `MYSQL_PORT` (3306) | `POSTGRES_PORT` (5432) |
| `MYSQL_DATABASE` | `POSTGRES_DATABASE` |

### Типы данных

| MySQL | PostgreSQL/SQLAlchemy |
|-------|----------------------|
| `BIGINT` | `BigInteger` |
| `TINYINT` | `Boolean` |
| `VARCHAR(n)` | `String(n)` |
| `TIMESTAMP` | `DateTime(timezone=True)` |

### Строка подключения

```python
# Было
mysql+aiomysql://user:pass@host:3306/db

# Стало  
postgresql+asyncpg://user:pass@host:5432/db
```

## Проверка миграции

После миграции проверьте:

1. **Подключение к БД**: `python3 -c "from database.base import engine; print('OK')"`
2. **Таблицы**: `python3 database/init_postgres.py`
3. **Данные**: проверьте количество записей в каждой таблице

## Откат на MySQL (если нужно)

1. Восстановите старые файлы из Git
2. Установите MySQL зависимости: `pip install aiomysql pymysql`
3. Обновите `.env` с `MYSQL_*` переменными
4. Запустите `python3 database/init_mysql.py`

## Преимущества PostgreSQL

- ✅ Лучшая производительность
- ✅ Более надежная работа с concurrent connections  
- ✅ Расширенные возможности SQL
- ✅ Лучшая поддержка JSON
- ✅ Более стабильная работа с часовыми поясами

## Поддержка

При возникновении проблем:

1. Проверьте логи бота: `journalctl -u VPNBot -f`
2. Проверьте статус PostgreSQL: `sudo systemctl status postgresql`
3. Проверьте подключение: `psql -h localhost -U bot -d vpn_shop` 