diff --git a/data/sql/194_grant_ekb_districts_fdw.sql b/data/sql/194_grant_ekb_districts_fdw.sql new file mode 100644 index 00000000..a102aff3 --- /dev/null +++ b/data/sql/194_grant_ekb_districts_fdw.sql @@ -0,0 +1,26 @@ +-- 194_grant_ekb_districts_fdw.sql +-- Витрина сделок МЕРЫ не могла показать район: FDW-чтение падало с +-- permission denied for view ekb_districts_geom +-- (foreign table tradein.gendesign_ekb_districts_geom → сервер gendesign_remote, +-- роль tradein_fdw_reader). +-- +-- Причина не в потере гранта, а в том, что его не выдавали НИКОГДА. +-- 74_dedupe_unified_views.sql делает `DROP TABLE ekb_districts_geom; +-- CREATE OR REPLACE VIEW ekb_districts_geom ...` — объект сменил тип с таблицы +-- на вьюху и был создан заново, а строки GRANT рядом не появилось. Все четыре +-- соседних объекта, которые tradein читает через тот же сервер +-- (rosreestr_deals, mv_quarter_price_index, v_tradein_cad_buildings, +-- v_tradein_osm_poi_ekb), грант имеют — этот остался единственным без него. +-- +-- Тот же класс, что #2583 (188_regrant_quarter_price_index_fdw.sql): грант живёт +-- отдельно от объекта и молча исчезает при пересоздании. Поэтому GRANT дописан +-- ТАКЖЕ в конец 74-й — чтобы повторное применение той миграции его не теряло. +-- +-- Признак починки: на tradein-стороне +-- SELECT count(*) FROM gendesign_ekb_districts_geom; -- было ERROR, стало 8 + +BEGIN; + +GRANT SELECT ON public.ekb_districts_geom TO tradein_fdw_reader; + +COMMIT; diff --git a/data/sql/74_dedupe_unified_views.sql b/data/sql/74_dedupe_unified_views.sql index 1cf63d52..b601ff92 100644 --- a/data/sql/74_dedupe_unified_views.sql +++ b/data/sql/74_dedupe_unified_views.sql @@ -254,3 +254,19 @@ SELECT 'nspd', log_id, run_id, ts, level, stage, cad_number, message COMMENT ON VIEW v_scrape_log_unified IS 'Per-step log двух скраперов. entity_id = obj_id для kn / cad_number для nspd. ' 'objective scraper пока не пишет log — добавим если понадобится debug.'; + +-- ── ГРАНТ ЖИВЁТ ЗДЕСЬ, А НЕ ОТДЕЛЬНО (29.08.2026) ────────────────────────── +-- Выше `DROP TABLE ekb_districts_geom` + `CREATE OR REPLACE VIEW` меняет тип +-- объекта, то есть создаёт его заново — а вместе с объектом исчезают и его +-- гранты. Из-за этого tradein-сторона (foreign table +-- gendesign_ekb_districts_geom, роль tradein_fdw_reader) читала вьюху с +-- `permission denied` и витрина сделок МЕРЫ теряла район. +-- Тот же урок, что в 188_regrant_quarter_price_index_fdw.sql: грант, лежащий в +-- отдельной миграции, переживает ровно до следующего пересоздания объекта. +-- Держим его рядом с CREATE, чтобы объект и его права ехали вместе. +-- +-- ЧЕСТНО О ДЕЙСТВИИ: на ДЕЙСТВУЮЩЕМ проде эта строка не выполнится никогда — +-- деплой применяет только файлы, которых ещё нет в _schema_migrations, а 74-я +-- давно записана. Работу делает 194_grant_ekb_districts_fdw.sql. Здесь строка +-- нужна для чистой базы и для случая, когда файл прогоняют руками. +GRANT SELECT ON public.ekb_districts_geom TO tradein_fdw_reader;