getpgdata: JSON API POST /api/sql для произвольных SQL-команд (WRITE_SQL=1), версия 1.0.3
This commit is contained in:
@@ -116,3 +116,28 @@ getpgdata/
|
||||
**⚠️ Точная причина падения пода по-прежнему не подтверждена** (нет доступа к логам Nubes).
|
||||
Если под не поднимется и после этого — смотреть логи `nodejsk8s` Deployment в Nubes UI:
|
||||
replica не активна (CrashLoopBackOff, invalidImage, порт/health, зависший старт).
|
||||
|
||||
## 7. JSON API POST /api/sql (перенос данных в новую ПГ)
|
||||
|
||||
**Контекст:** нужно перенести белые списки (IP, кто создал, когда) из прежней БД в **новую**
|
||||
PostgreSQL (тот же realm k8s). Доступ к новой БД — через Keycloak, автоматизировать нельзя.
|
||||
Решение: код в репе `getpgdata` + передеплой с кредами новой ПГ.
|
||||
|
||||
**Что добавлено (версия 1.0.3):**
|
||||
- Эндпоинт **`POST /api/sql`** — JSON API для произвольных SQL-команд.
|
||||
Body: `{ "sql": "...", "params": [...] }` (params → `$1..$n`).
|
||||
- `SELECT`/`WITH` → `{ ok:true, fields, rows, rowCount }` (всегда доступен)
|
||||
- `INSERT`/`UPDATE`/`DELETE`/DDL → `{ ok:true, rowCount }` **только при `WRITE_SQL=1`**
|
||||
- иначе → HTTP 403 «Write-SQL отключён»
|
||||
- **Защита:** выполняется только первый statement (split по `;`) — блокирует мульти-команды
|
||||
вроде `SELECT 1; DROP TABLE ...`.
|
||||
- Флаг в env: `WRITE_SQL=1` включает запись.
|
||||
|
||||
**Логика переноса:**
|
||||
1. Приложение подключено к прежней БД — читать данные через `/api/sql` (SELECT).
|
||||
2. Сменить креды в jsonEnv на новую ПГ (+ `WRITE_SQL=1`).
|
||||
3. Передеплой — теперь `/api/sql` выполняет запросы уже в новой БД; выполнить INSERT данных.
|
||||
|
||||
**Проверено:** `node -c server.js` OK; локально: пустой SQL → 400; SELECT → идёт в БД;
|
||||
`INSERT` без `WRITE_SQL` → 403 (до попытки подключения); `WRITE_SQL=1` + мульти-statement →
|
||||
берётся только первый; процесс проверки остановлен.
|
||||
|
||||
Reference in New Issue
Block a user