getpgdata: JSON API POST /api/sql для произвольных SQL-команд (WRITE_SQL=1), версия 1.0.3
This commit is contained in:
@@ -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"`
|
||||
|
||||
## Структура
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user