Compare commits
2
Commits
fd373ff582
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b60f3313a5 | ||
|
|
0b2d7ac990 |
@@ -0,0 +1,38 @@
|
||||
# data/ — дамп данных прежней БД
|
||||
|
||||
Здесь сохранены данные, выгруженные из **прежней** PostgreSQL (инстанс
|
||||
`postgresqlk8s-master.60bdf3e3-...`, БД `ipwhitelist`), до переноса в новую
|
||||
(инстанс `a5e9d24f`).
|
||||
|
||||
## Файлы
|
||||
|
||||
| Файл | Таблица | Строк | Описание |
|
||||
|---|---|---|---|
|
||||
| `companies.json` | companies | 9 | метаданные компаний (id, client_id, name, custom_limit, created_at, updated_at) |
|
||||
| `whitelist_entries.json` | whitelist_entries | 20 | записи белого списка (IP, comment, кто создал/изменил/удалил, даты) |
|
||||
| `audit_log.json` | audit_log | 39 | журнал аудита (user_email, company_id, action, old/new_value, entry_id, created_at) |
|
||||
| `_migrations.json` | _migrations | 2 | применённые миграции |
|
||||
| `import.sql` | — | 84 строки | готовый SQL-скрипт вставки (companies → entries → audit + sequence) |
|
||||
|
||||
Формат каждого `.json` — ответ `POST /api/sql`:
|
||||
```json
|
||||
{ "ok": true, "fields": [...], "rows": [...], "rowCount": N }
|
||||
```
|
||||
|
||||
## Почему нет session.json
|
||||
|
||||
Таблица `session` (1147 строк) — временные пользовательские сессии входа
|
||||
(`connect-pg-simple`). Для переноса белых списков не нужна и не переносится —
|
||||
в новой БД сессии создаются заново. Дамп `session.json` был обрезан и удалён.
|
||||
|
||||
## import.sql
|
||||
|
||||
Генерируется из `*.json` и содержит:
|
||||
- `BEGIN; ... COMMIT;` — транзакция
|
||||
- INSERT для `companies` (с явными id, `ON CONFLICT (id) DO NOTHING`)
|
||||
- INSERT для `whitelist_entries` (id + company_id — ссылки сохранены)
|
||||
- INSERT для `audit_log`
|
||||
- `SELECT setval(...)` — сброс sequence на MAX(id)
|
||||
|
||||
**Важно:** `/api/sql` выполняет ОДИН statement за вызов, поэтому `import.sql` целиком
|
||||
никак не выполнить одним запросом. Вставка делалась клиентом по одному INSERT.
|
||||
@@ -0,0 +1,84 @@
|
||||
-- getpgdata: перенос данных из прежней БД (60bdf3e3) в новую
|
||||
-- сгенерировано из data/*.json, 2026-08-18
|
||||
BEGIN;
|
||||
|
||||
-- companies
|
||||
INSERT INTO companies (id, client_id, name, custom_limit, created_at, updated_at) VALUES (1, 'WZ01325', 'WZ01325', 15, '2026-06-23T09:16:30.863Z', '2026-07-07T08:11:10.173Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO companies (id, client_id, name, custom_limit, created_at, updated_at) VALUES (2, 'WZ01112', 'WZ01112', 17, '2026-06-23T09:18:38.912Z', '2026-07-14T09:10:49.768Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO companies (id, client_id, name, custom_limit, created_at, updated_at) VALUES (23, 'WZ03709', 'WZ03709', NULL, '2026-06-30T13:01:07.788Z', NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO companies (id, client_id, name, custom_limit, created_at, updated_at) VALUES (26, 'WZ02319', 'WZ02319', 15, '2026-07-01T07:49:59.870Z', '2026-07-07T08:11:06.632Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO companies (id, client_id, name, custom_limit, created_at, updated_at) VALUES (69, 'WZ01609', 'WZ01609', NULL, '2026-07-01T13:32:26.705Z', NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO companies (id, client_id, name, custom_limit, created_at, updated_at) VALUES (333, 'WZ01038', 'WZ01038', NULL, '2026-07-31T11:05:31.287Z', NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO companies (id, client_id, name, custom_limit, created_at, updated_at) VALUES (334, 'WZ03656', 'WZ03656', NULL, '2026-07-31T11:46:46.190Z', NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO companies (id, client_id, name, custom_limit, created_at, updated_at) VALUES (337, 'WZ02727', 'WZ02727', NULL, '2026-07-31T12:01:22.164Z', NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO companies (id, client_id, name, custom_limit, created_at, updated_at) VALUES (368, 'WZ02425', 'WZ02425', NULL, '2026-07-31T13:14:20.366Z', NULL) ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- whitelist_entries
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (1, 1, '1.2.3.4/30', '3000', 'tazet@narod.ru', '2026-06-23T09:54:29.541Z', NULL, NULL, 'tazet@narod.ru', '2026-06-23T09:57:25.431Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (2, 2, '91.247.235.224/32', 'dsorokin@nubes.ru home', 'dsorokin@nubes.ru', '2026-07-01T07:52:27.401Z', NULL, NULL, 'nstasyuk@nubes.ru', '2026-07-14T09:10:46.558Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (3, 2, '79.111.119.78/32', 'dsorokin@nubes.ru home', 'dsorokin@nubes.ru', '2026-07-01T07:53:20.615Z', NULL, NULL, 'nstasyuk@nubes.ru', '2026-07-14T09:10:44.986Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (4, 69, '3.3.3.0/28', '434', 'helpwanted187@gmail.com', '2026-07-07T08:10:04.800Z', NULL, NULL, 'helpwanted187@gmail.com', '2026-07-07T08:10:14.608Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (5, 2, '102.15.15.0/24', '244', 'nstasyuk@nubes.ru', '2026-07-07T08:12:10.483Z', NULL, NULL, 'nstasyuk@nubes.ru', '2026-07-07T08:12:23.831Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (6, 2, '1.1.1.11/32', NULL, 'ntazetdinov@nubes.ru', '2026-07-07T15:25:13.970Z', NULL, NULL, 'ntazetdinov@nubes.ru', '2026-07-07T15:25:23.538Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (7, 2, '8.8.8.8/32', 'тест', 'akovalev@nubes.ru', '2026-07-27T14:53:20.784Z', NULL, NULL, NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (8, 2, '86.86.86.86/32', 'тест2аыва', 'akovalev@nubes.ru', '2026-07-31T09:22:54.233Z', 'akovalev@nubes.ru', '2026-07-31T10:44:43.019Z', 'akovalev@nubes.ru', '2026-07-31T10:44:46.867Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (9, 334, '89.109.248.216/29', 'KiN', 'v.dolzhikov@kin1969.ru', '2026-07-31T11:49:21.908Z', 'v.dolzhikov@kin1969.ru', '2026-07-31T12:38:41.697Z', NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (10, 337, '80.243.4.64/29', 'СПЗ Компнет', 'tarasov@rza.ru', '2026-07-31T12:03:23.347Z', 'tarasov@rza.ru', '2026-07-31T12:04:20.320Z', NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (11, 337, '80.243.7.192/29', 'ВКЗ Компнет', 'tarasov@rza.ru', '2026-07-31T12:04:04.295Z', NULL, NULL, NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (12, 337, '93.188.46.16/29', 'ВКЗ Дапл', 'tarasov@rza.ru', '2026-07-31T12:05:04.557Z', 'tarasov@rza.ru', '2026-07-31T12:08:39.481Z', NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (13, 334, '178.177.24.120/30', 'Mega_KiN', 'v.dolzhikov@kin1969.ru', '2026-07-31T12:05:47.538Z', 'v.dolzhikov@kin1969.ru', '2026-07-31T12:38:43.377Z', NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (14, 337, '46.46.168.64/29', 'СПЗ РЕТН', 'tarasov@rza.ru', '2026-07-31T12:08:17.306Z', 'tarasov@rza.ru', '2026-07-31T12:08:31.876Z', NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (15, 337, '5.172.178.123/32', 'Nubes Post', 'tarasov@rza.ru', '2026-07-31T12:09:07.979Z', NULL, NULL, NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (16, 337, '91.214.116.50/32', 'Nubes 1Forma', 'tarasov@rza.ru', '2026-07-31T12:09:50.849Z', NULL, NULL, NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (17, 337, '91.214.116.66/32', 'Nubes 1Forma VKS', 'tarasov@rza.ru', '2026-07-31T12:10:05.329Z', NULL, NULL, NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (18, 334, '91.196.73.0/28', 'Alvisa1', 'v.dolzhikov@kin1969.ru', '2026-07-31T12:15:03.214Z', NULL, NULL, 'v.dolzhikov@kin1969.ru', '2026-07-31T12:17:12.663Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (19, 368, '80.80.109.5/32', 'терминал управления', 'konoval.ig@lombardblago.ru', '2026-07-31T13:14:48.056Z', NULL, NULL, NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO whitelist_entries (id, company_id, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) VALUES (20, 368, '213.27.106.25/32', 'терминал управления2', 'konoval.ig@lombardblago.ru', '2026-07-31T13:15:15.518Z', NULL, NULL, NULL, NULL) ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- audit_log
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (1, 'tazet@narod.ru', 1, 'CREATE', NULL, '1.2.3.4/30', 1, NULL, '2026-06-23T09:54:29.541Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (2, 'tazet@narod.ru', 1, 'DELETE', '1.2.3.4/30', NULL, 1, NULL, '2026-06-23T09:57:25.431Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (3, 'dsorokin@nubes.ru', 2, 'CREATE', NULL, '91.247.235.224/32', 2, NULL, '2026-07-01T07:52:27.401Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (4, 'dsorokin@nubes.ru', 2, 'CREATE', NULL, '79.111.119.78/32', 3, NULL, '2026-07-01T07:53:20.615Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (5, 'helpwanted187@gmail.com', 69, 'CREATE', NULL, '3.3.3.0/28', 4, NULL, '2026-07-07T08:10:04.800Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (6, 'helpwanted187@gmail.com', 69, 'DELETE', '3.3.3.0/28', NULL, 4, NULL, '2026-07-07T08:10:14.608Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (7, 'nstasyuk@nubes.ru', 2, 'DELETE', '79.111.119.78/32', NULL, 3, NULL, '2026-07-07T08:10:57.260Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (8, 'nstasyuk@nubes.ru', 2, 'DELETE', '91.247.235.224/32', NULL, 2, NULL, '2026-07-07T08:10:58.717Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (9, 'nstasyuk@nubes.ru', 2, 'CREATE', NULL, '102.15.15.0/24', 5, NULL, '2026-07-07T08:12:10.483Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (10, 'nstasyuk@nubes.ru', 2, 'DELETE', '102.15.15.0/24', NULL, 5, NULL, '2026-07-07T08:12:23.831Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (11, 'ntazetdinov@nubes.ru', 2, 'CREATE', NULL, '1.1.1.11/32', 6, NULL, '2026-07-07T15:25:13.970Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (12, 'ntazetdinov@nubes.ru', 2, 'DELETE', '1.1.1.11/32', NULL, 6, NULL, '2026-07-07T15:25:23.538Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (13, 'ntazetdinov@nubes.ru', 2, 'RESTORE', '79.111.119.78/32', '79.111.119.78/32', 3, NULL, '2026-07-07T17:56:02.930Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (14, 'ntazetdinov@nubes.ru', 2, 'RESTORE', '91.247.235.224/32', '91.247.235.224/32', 2, NULL, '2026-07-07T17:56:05.753Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (15, 'nstasyuk@nubes.ru', 2, 'DELETE', '79.111.119.78/32', NULL, 3, NULL, '2026-07-14T09:10:44.986Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (16, 'nstasyuk@nubes.ru', 2, 'DELETE', '91.247.235.224/32', NULL, 2, NULL, '2026-07-14T09:10:46.558Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (17, 'akovalev@nubes.ru', 2, 'CREATE', NULL, '8.8.8.8/32', 7, NULL, '2026-07-27T14:53:20.784Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (18, 'akovalev@nubes.ru', 2, 'CREATE', NULL, '86.86.86.86/32', 8, NULL, '2026-07-31T09:22:54.233Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (19, 'akovalev@nubes.ru', 2, 'UPDATE', '86.86.86.86/32', '86.86.86.86/32', 8, NULL, '2026-07-31T10:20:48.352Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (20, 'akovalev@nubes.ru', 2, 'UPDATE', '86.86.86.86/32', '86.86.86.86/32', 8, NULL, '2026-07-31T10:44:43.019Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (21, 'akovalev@nubes.ru', 2, 'DELETE', '86.86.86.86/32', NULL, 8, NULL, '2026-07-31T10:44:46.867Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (22, 'v.dolzhikov@kin1969.ru', 334, 'CREATE', NULL, '89.109.248.216/29', 9, NULL, '2026-07-31T11:49:21.908Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (23, 'tarasov@rza.ru', 337, 'CREATE', NULL, '80.243.4.64/29', 10, NULL, '2026-07-31T12:03:23.347Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (24, 'tarasov@rza.ru', 337, 'CREATE', NULL, '80.243.7.192/29', 11, NULL, '2026-07-31T12:04:04.295Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (25, 'tarasov@rza.ru', 337, 'UPDATE', '80.243.4.64/29', '80.243.4.64/29', 10, NULL, '2026-07-31T12:04:20.320Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (26, 'tarasov@rza.ru', 337, 'CREATE', NULL, '93.188.46.16/29', 12, NULL, '2026-07-31T12:05:04.557Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (27, 'v.dolzhikov@kin1969.ru', 334, 'CREATE', NULL, '178.177.24.120/30', 13, NULL, '2026-07-31T12:05:47.538Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (28, 'tarasov@rza.ru', 337, 'CREATE', NULL, '46.46.168.64/29', 14, NULL, '2026-07-31T12:08:17.306Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (29, 'tarasov@rza.ru', 337, 'UPDATE', '46.46.168.64/29', '46.46.168.64/29', 14, NULL, '2026-07-31T12:08:31.876Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (30, 'tarasov@rza.ru', 337, 'UPDATE', '93.188.46.16/29', '93.188.46.16/29', 12, NULL, '2026-07-31T12:08:39.481Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (31, 'tarasov@rza.ru', 337, 'CREATE', NULL, '5.172.178.123/32', 15, NULL, '2026-07-31T12:09:07.979Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (32, 'tarasov@rza.ru', 337, 'CREATE', NULL, '91.214.116.50/32', 16, NULL, '2026-07-31T12:09:50.849Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (33, 'tarasov@rza.ru', 337, 'CREATE', NULL, '91.214.116.66/32', 17, NULL, '2026-07-31T12:10:05.329Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (34, 'v.dolzhikov@kin1969.ru', 334, 'CREATE', NULL, '91.196.73.0/28', 18, NULL, '2026-07-31T12:15:03.214Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (35, 'v.dolzhikov@kin1969.ru', 334, 'DELETE', '91.196.73.0/28', NULL, 18, NULL, '2026-07-31T12:17:12.663Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (36, 'v.dolzhikov@kin1969.ru', 334, 'UPDATE', '89.109.248.216/29', '89.109.248.216/29', 9, NULL, '2026-07-31T12:38:41.697Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (37, 'v.dolzhikov@kin1969.ru', 334, 'UPDATE', '178.177.24.120/30', '178.177.24.120/30', 13, NULL, '2026-07-31T12:38:43.377Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (38, 'konoval.ig@lombardblago.ru', 368, 'CREATE', NULL, '80.80.109.5/32', 19, NULL, '2026-07-31T13:14:48.056Z') ON CONFLICT (id) DO NOTHING;
|
||||
INSERT INTO audit_log (id, user_email, company_id, action, old_value, new_value, entry_id, impersonated_by, created_at) VALUES (39, 'konoval.ig@lombardblago.ru', 368, 'CREATE', NULL, '213.27.106.25/32', 20, NULL, '2026-07-31T13:15:15.518Z') ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- последовательности
|
||||
SELECT setval(pg_get_serial_sequence('companies','id'), COALESCE((SELECT MAX(id) FROM companies),1));
|
||||
SELECT setval(pg_get_serial_sequence('whitelist_entries','id'), COALESCE((SELECT MAX(id) FROM whitelist_entries),1));
|
||||
SELECT setval(pg_get_serial_sequence('audit_log','id'), COALESCE((SELECT MAX(id) FROM audit_log),1));
|
||||
|
||||
COMMIT;
|
||||
@@ -141,3 +141,103 @@ PostgreSQL (тот же realm k8s). Доступ к новой БД — чере
|
||||
**Проверено:** `node -c server.js` OK; локально: пустой SQL → 400; SELECT → идёт в БД;
|
||||
`INSERT` без `WRITE_SQL` → 403 (до попытки подключения); `WRITE_SQL=1` + мульти-statement →
|
||||
берётся только первый; процесс проверки остановлен.
|
||||
|
||||
## 8. Перенос данных из прежней БД в новую (60bdf3e3 → a5e9d24f)
|
||||
|
||||
**Цель:** перенести белые списки (IP, кто создал, когда) и связанные данные в **новую**
|
||||
PostgreSQL (инстанс `a5e9d24f`), тот же realm k8s. Доступ к новой БД — через Keycloak,
|
||||
автоматизировать нельзя → перенос выполнен через `getpgdata` + `POST /api/sql`.
|
||||
|
||||
### 8.1 Выгрузка данных из прежней БД
|
||||
|
||||
Пока приложение было подключено к прежней БД (`60bdf3e3`), все таблицы выгружены через
|
||||
`/api/sql` (SELECT * ORDER BY id) и **сохранены в репо** в `data/*.json`:
|
||||
|
||||
| Файл | Таблица | Строк | Статус |
|
||||
|---|---|---|---|
|
||||
| `data/companies.json` | companies | 9 | полный, валиден |
|
||||
| `data/whitelist_entries.json` | whitelist_entries | 20 | полный, валиден |
|
||||
| `data/audit_log.json` | audit_log | 39 | полный, валиден |
|
||||
| `data/_migrations.json` | _migrations | 2 | полный, валиден |
|
||||
| session | session | 1147 | исключён (битый дамп, не нужен для переноса) |
|
||||
|
||||
Сессии намеренно НЕ переносятся: это временные пользовательские сессии входа
|
||||
(`connect-pg-simple`), в новой БД они создаются заново.
|
||||
|
||||
Коммиты: данные `~`, генератор `data/import.sql` (коммит `0b2d7ac`).
|
||||
|
||||
⚠️ **Урок (зафиксирован в памяти):** нужно было выгрузить ВСЕ таблицы до смены кредов.
|
||||
Первая выгрузка сохранила только `whitelist_entries`; `companies`/`audit_log` пришлось
|
||||
догонять после временного возврата кредов на прежнюю БД.
|
||||
|
||||
### 8.2 Переключение на новую БД
|
||||
|
||||
В jsonEnv Nubes (`modify`) заданы креды новой ПГ + `WRITE_SQL=1`:
|
||||
```json
|
||||
{
|
||||
"DB_HOST": "postgresqlk8s-master.a5e9d24f-0b5d-4196-8903-7ed60f6e6557.svc.cluster.local",
|
||||
"DB_PORT": "5432",
|
||||
"DB_NAME": "ipwhitelist",
|
||||
"DB_USER": "super",
|
||||
"DB_PASS": "<пароль новой ПГ>",
|
||||
"DB_SSLMODE": "disable",
|
||||
"WRITE_SQL": "1",
|
||||
"PORT": "3000"
|
||||
}
|
||||
```
|
||||
После `modify` проверено: `GET /` показывает host новой ПГ; `CREATE TEMP TABLE` → 200
|
||||
(запись разрешена).
|
||||
|
||||
### 8.3 Проблема: несоответствие id компаний
|
||||
|
||||
В новой БД **изначально уже были компании** под другими id (типовая схема), поэтому при
|
||||
прямой вставке по старым id возникли конфликты:
|
||||
|
||||
- Вставка с явным id: `WZ03709`(id=23) упал — duplicate key по `client_id` (в новой БД
|
||||
`WZ03709` уже был под id=2)
|
||||
- `WZ01112` и `WZ03709` оказались на неверных id (1 и 2 вместо 2 и 23)
|
||||
- `WZ01325` (должен быть id=1) — вообще отсутствовал
|
||||
|
||||
**Причина:** уникальный индекс `companies_client_id_key` (client_id), id в новой БД не
|
||||
совпадали со старой.
|
||||
|
||||
**Решение (безопасно, т.к. записи/аудит в новой БД были пусты и FK на companies отсутствуют):**
|
||||
1. `DELETE FROM companies WHERE client_id IN ('WZ01112','WZ03709')` — убрать с неверных id
|
||||
2. Вставить заново под правильные id: id=1→WZ01325, id=2→WZ01112, id=23→WZ03709
|
||||
3. Восстановить `custom_limit` и даты для этих 3 строк из дампа (первая вставка ставила `NOW()`)
|
||||
|
||||
После этого маппинг id компаний новой БД **полностью совпал** со старой.
|
||||
|
||||
### 8.4 Вставка данных через /api/sql
|
||||
|
||||
Так как `/api/sql` выполняет **один statement** за вызов, INSERT отправлены по одному
|
||||
стейтменту (клиент на Python):
|
||||
|
||||
1. `companies` — 9 вставок (с явными id, `ON CONFLICT (id) DO NOTHING`)
|
||||
2. `whitelist_entries` — 20 вставок (id, company_id, value_cidr, comment, created_by,
|
||||
created_at, updated_by, updated_at, deleted_by, deleted_at)
|
||||
3. `audit_log` — 39 вставок
|
||||
4. `SELECT setval(...)` — сброс sequence для трёх таблиц на MAX(id)
|
||||
|
||||
### 8.5 Проверка целостности и соответствия
|
||||
|
||||
После переноса выполнена **посимвольная сверка** новой БД против дампа старой:
|
||||
|
||||
| Таблица | Строк old/new | missing | extra | diffs | Результат |
|
||||
|---|---|---|---|---|---|
|
||||
| whitelist_entries | 20/20 | 0 | 0 | 0 | **MATCH** |
|
||||
| audit_log | 39/39 | 0 | 0 | 0 | **MATCH** |
|
||||
| companies | 9/9 | 0 | 0 | 0 (после фикса) | **MATCH** |
|
||||
|
||||
- `orphan` (записи без компании): **0** — все связи верны
|
||||
- sequences: companies→368, whitelist_entries→20, audit_log→39
|
||||
|
||||
### 8.6 Итоговое состояние новой БД
|
||||
|
||||
- companies = 9
|
||||
- whitelist_entries = 20 (из них активных 12, удалённых 8 — перенесены с deleted_at)
|
||||
- audit_log = 39
|
||||
- Данные идентичны прежней БД.
|
||||
|
||||
**Активные белые списки (12):** WZ02425 (2), WZ02727 (6), WZ03656 (2), WZ01112 (8.8.8.8).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user