getpgdata: JSON API POST /api/sql для произвольных SQL-команд (WRITE_SQL=1), версия 1.0.3

This commit is contained in:
naeel
2026-08-18 21:22:50 +04:00
parent 352e7ec2e6
commit 886d1f073d
4 changed files with 105 additions and 1 deletions
+28
View File
@@ -9,8 +9,36 @@ Node.js приложение для доступа к PostgreSQL (managed k8s, i
- `GET /` — состояние подключения и список таблиц (не системные схемы)
- `GET /table?schema=public&name=<table>` — просмотр содержимого таблицы с пагинацией
- `POST /query` — SQL-консоль (read-only, только `SELECT`)
- `POST /api/sql` — JSON API для произвольных SQL-команд (см. ниже)
- `GET /healthz` — liveness-проба для k8s
## JSON API: POST /api/sql
Выполняет произвольный SQL против БД, на которую настроено приложение (текущие креды).
Удобен для переноса данных между БД: читать из прежней (текущие креды) → затем после
смены кредов на новую ПГ вставлять.
**Запрос:**
```bash
curl -X POST https://<app>/api/sql \
-H 'Content-Type: application/json' \
-d '{"sql":"SELECT * FROM whitelist_entries LIMIT 10"}'
```
**Тело:** `{ "sql": "...", "params": [...] }` — `params` подставляются в `$1..$n`.
**Ответ:**
- `SELECT` → `{ "ok": true, "fields": [...], "rows": [...], "rowCount": n }`
- `INSERT/UPDATE/DELETE` → `{ "ok": true, "rowCount": n }`
- ошибка → HTTP 400/403, `{ "ok": false, "error": "..." }`
**Ограничения и безопасность:**
- Выполняется **один statement** (первый до `;`) — защита от мульти-комманд (`; DROP ...`)
- `SELECT`/`WITH` — доступны всегда
- `INSERT`/`UPDATE`/`DELETE`/`DDL` — **только при `WRITE_SQL=1`** в env;
иначе возвращается HTTP 403 «Write-SQL отключён»
- Для включения записи в jsonEnv добавь `"WRITE_SQL": "1"`
## Структура
```