All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m2s
CI / backend-tests (pull_request) Successful in 17m41s
Номер 191 занят PR #2984 (backfill act_date), который уходит в main раньше. Обе ветки прошли CI со своим 191 — проверка идёт по голове ветки и о занятости номера соседом узнать не может. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
57 lines
3.6 KiB
PL/PgSQL
57 lines
3.6 KiB
PL/PgSQL
-- 192: бизнес-ключ gisogd_permits — идентификатор документа на портале (#2986).
|
||
--
|
||
-- Было: UNIQUE (doc_group, doc_num). Ключ выбирался, чтобы склеивать ОДИН документ,
|
||
-- пришедший из двух схем портала. Замер 20.08.2026 показал, что задача, ради которой
|
||
-- он введён, почти отсутствует, а побочный эффект огромен:
|
||
--
|
||
-- общих docNum между схемами (DocRS): 2
|
||
-- общих key между схемами (DocRS): 2 ← те же два
|
||
--
|
||
-- группа документов различных key различных docNum схлопывается
|
||
-- DocRS 6098 6096 4305 1793
|
||
-- DocRV 5419 5415 4969 450
|
||
-- DocIZ 548 547 393 155
|
||
--
|
||
-- Причина: docNum у ГИСОГД не уникален. Разрешение и изменения к нему носят ОДИН
|
||
-- номер. Пример 66-06-06-2026: портал отдаёт два документа (key 1000130002719586 —
|
||
-- само разрешение, key 1000130002752293 — изменения к нему), а UPSERT с
|
||
-- предпочтением позднего date_reg оставлял только изменение. Самого разрешения в
|
||
-- данных не оставалось. На проде так вытеснено 598 из 4320 строк РНС (13.8%).
|
||
--
|
||
-- Стало: UNIQUE (source_key) — идентификатор документа на портале. Он разделяет
|
||
-- разрешение и изменения (разные key) и по-прежнему склеивает настоящие межсхемные
|
||
-- дубли (у них key ОБЩИЙ — те самые 7 записей по всем трём группам).
|
||
--
|
||
-- Дедуп перед сменой ключа не нужен: на проде 20.08.2026 source_key уже уникален —
|
||
-- 9182 различных на 9182 строки, NOT NULL. Констрейнт встаёт как есть.
|
||
--
|
||
-- CHECK расширен значением 'IZ': группа DocIZ (изменения) есть на портале с самого
|
||
-- начала, но в GROUP_CODE лоадера её не было, и 548 документов не грузились вовсе.
|
||
|
||
BEGIN;
|
||
|
||
SET LOCAL lock_timeout = '5s';
|
||
|
||
ALTER TABLE gisogd_permits
|
||
DROP CONSTRAINT IF EXISTS gisogd_permits_doc_group_doc_num_key;
|
||
|
||
ALTER TABLE gisogd_permits
|
||
DROP CONSTRAINT IF EXISTS chk_gisogd_permits_doc_group;
|
||
|
||
ALTER TABLE gisogd_permits
|
||
ADD CONSTRAINT chk_gisogd_permits_doc_group
|
||
CHECK (doc_group IN ('RS', 'RV', 'IZ'));
|
||
|
||
ALTER TABLE gisogd_permits
|
||
ADD CONSTRAINT uq_gisogd_permits_source_key UNIQUE (source_key);
|
||
|
||
-- (doc_group, doc_num) перестаёт быть уникальным, но остаётся рабочим фильтром
|
||
-- («все документы по номеру разрешения») — оставляем как обычный индекс.
|
||
CREATE INDEX IF NOT EXISTS idx_gisogd_permits_group_num
|
||
ON gisogd_permits (doc_group, doc_num);
|
||
|
||
COMMENT ON CONSTRAINT uq_gisogd_permits_source_key ON gisogd_permits IS
|
||
'Бизнес-ключ = key документа на портале ГИСОГД-СО. docNum НЕ уникален: '
|
||
'разрешение и изменения к нему носят один номер (#2986).';
|
||
|
||
COMMIT;
|