fix(sql): emiss backfill period_type='quarter' to match scraper (#1606 review)
Some checks failed
CI / changes (push) Successful in 9s
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (push) Has been skipped
CI / openapi-codegen-check (push) Failing after 1m37s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Failing after 1m35s
CI / backend-tests (push) Failing after 8m53s
CI / backend-tests (pull_request) Failing after 8m41s
Some checks failed
CI / changes (push) Successful in 9s
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (push) Has been skipped
CI / openapi-codegen-check (push) Failing after 1m37s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Failing after 1m35s
CI / backend-tests (push) Failing after 8m53s
CI / backend-tests (pull_request) Failing after 8m41s
This commit is contained in:
parent
5170107405
commit
2659600374
1 changed files with 16 additions and 10 deletions
|
|
@ -13,9 +13,11 @@
|
||||||
-- 1. Добавляет колонку period_type TEXT NOT NULL DEFAULT 'unknown'.
|
-- 1. Добавляет колонку period_type TEXT NOT NULL DEFAULT 'unknown'.
|
||||||
-- Все существующие строки (CBR, rosstat open-data, domrf) получают 'unknown' —
|
-- Все существующие строки (CBR, rosstat open-data, domrf) получают 'unknown' —
|
||||||
-- это корректно: у них нет sub-period granularity (они уже различаются по obs_date).
|
-- это корректно: у них нет sub-period granularity (они уже различаются по obs_date).
|
||||||
-- 2. Бэкфилл: строки source='emiss' обновляем до 'quarterly' (единственный
|
-- 2. Бэкфилл: строки source='emiss' обновляем до 'quarter' (единственный
|
||||||
-- активный ЕМИСС-индикатор — income_per_capita, он квартальный; годовых EMISS-
|
-- активный ЕМИСС-индикатор — income_per_capita, он квартальный; годовых EMISS-
|
||||||
-- строк ещё нет в таблице до этой миграции).
|
-- строк ещё нет в таблице до этой миграции). Значение ДОЛЖНО совпадать с тем,
|
||||||
|
-- что пишет UPSERT_EMISS_SQL (_emiss_period_granularity → 'quarter'/'year'/'month',
|
||||||
|
-- короткая форма), иначе ON CONFLICT не сматчит → дубли при следующем скрейпе.
|
||||||
-- 3. Пересоздаёт PRIMARY KEY: старый (indicator_type, region, obs_date) → новый
|
-- 3. Пересоздаёт PRIMARY KEY: старый (indicator_type, region, obs_date) → новый
|
||||||
-- (indicator_type, region, obs_date, period_type).
|
-- (indicator_type, region, obs_date, period_type).
|
||||||
-- 4. Пересоздаёт сопутствующий индекс idx_macro_type_region_date с тем же составом
|
-- 4. Пересоздаёт сопутствующий индекс idx_macro_type_region_date с тем же составом
|
||||||
|
|
@ -38,11 +40,15 @@ BEGIN;
|
||||||
ALTER TABLE macro_indicator
|
ALTER TABLE macro_indicator
|
||||||
ADD COLUMN IF NOT EXISTS period_type TEXT NOT NULL DEFAULT 'unknown';
|
ADD COLUMN IF NOT EXISTS period_type TEXT NOT NULL DEFAULT 'unknown';
|
||||||
|
|
||||||
-- ── 2. Бэкфилл ЕМИСС-строк → 'quarterly' ────────────────────────────────────────────
|
-- ── 2. Бэкфилл ЕМИСС-строк → 'quarter' ────────────────────────────────────────────
|
||||||
-- Все существующие ЕМИСС-строки — quarterly (income_per_capita). Если появятся 'year'-
|
-- Все существующие ЕМИСС-строки — квартальные (income_per_capita). Значение 'quarter'
|
||||||
-- строки (будущие индикаторы) — они придут с корректным period_type из нового скрейпера.
|
-- (короткая форма) обязано совпадать с UPSERT_EMISS_SQL, который параметризует
|
||||||
|
-- period_type из _emiss_period_granularity ('quarter'/'year'/'month'). Иначе после
|
||||||
|
-- деплоя следующий скрейп вставит 'quarter'-строки, не матчащие 'quarterly' на
|
||||||
|
-- ON CONFLICT → дубли для каждого квартального наблюдения. Если появятся 'year'-строки
|
||||||
|
-- (будущие индикаторы) — придут с корректным period_type из скрейпера.
|
||||||
UPDATE macro_indicator
|
UPDATE macro_indicator
|
||||||
SET period_type = 'quarterly'
|
SET period_type = 'quarter'
|
||||||
WHERE source = 'emiss'
|
WHERE source = 'emiss'
|
||||||
AND period_type = 'unknown';
|
AND period_type = 'unknown';
|
||||||
|
|
||||||
|
|
@ -60,16 +66,16 @@ EXCEPTION
|
||||||
END;
|
END;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
-- Новый PK включает period_type. Если уже существует с правильным составом —
|
-- Новый PK включает period_type. Если constraint с этим именем уже существует —
|
||||||
-- ADD CONSTRAINT бросит duplicate_table (конвенция Pg: PK → unique index), ловим.
|
-- ADD CONSTRAINT бросит duplicate_object (42710, дубль имени constraint), ловим.
|
||||||
DO $$
|
DO $$
|
||||||
BEGIN
|
BEGIN
|
||||||
ALTER TABLE macro_indicator
|
ALTER TABLE macro_indicator
|
||||||
ADD CONSTRAINT macro_indicator_pkey
|
ADD CONSTRAINT macro_indicator_pkey
|
||||||
PRIMARY KEY (indicator_type, region, obs_date, period_type);
|
PRIMARY KEY (indicator_type, region, obs_date, period_type);
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN duplicate_table THEN
|
WHEN duplicate_object THEN
|
||||||
NULL; -- PK уже создан (повторный прогон)
|
NULL; -- constraint с таким именем уже создан (повторный прогон)
|
||||||
WHEN invalid_table_definition THEN
|
WHEN invalid_table_definition THEN
|
||||||
NULL; -- уже существует тот же constraint
|
NULL; -- уже существует тот же constraint
|
||||||
END;
|
END;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue