fix(gendesign): FDW-роль не могла читать районы ЕКБ — витрина сделок МЕРЫ теряла район #3227
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3227
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/ekb-districts-fdw-grant"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Найдено при подготовке витрины реальных сделок для лэндинга МЕРЫ.
Симптом
На tradein-стороне любой запрос к foreign table
gendesign_ekb_districts_geomпадает:То есть район у сделки не резолвится, и лента на лэндинге показывала бы «2-к, 54 м², 5 эт.» без района.
Диагноз (замер, а не догадка)
При этом все четыре соседних объекта того же FDW-сервера
gendesign_remoteгрант имеют:rosreestr_dealstradein_fdw_reader=r/gendesignmv_quarter_price_indextradein_fdw_reader=r/gendesignv_tradein_cad_buildingstradein_fdw_reader=r/gendesignv_tradein_osm_poi_ekbtradein_fdw_reader=r/gendesignekb_districts_geomПравильный образец лежал в двух шагах от дефекта.
Грант не «потерялся» — его не выдавали никогда.
74_dedupe_unified_views.sqlделаетDROP TABLE ekb_districts_geom;+CREATE OR REPLACE VIEW ekb_districts_geom AS ..., то есть меняет тип объекта и создаёт его заново, а строкиGRANTрядом не было. Объект на проде сейчасrelkind='v', хотя56_schema_ekb_districts_geom.sqlзаводил таблицу.Тот же класс, что #2583 (
188_regrant_quarter_price_index_fdw.sql): право живёт отдельно от объекта и исчезает при пересоздании молча — FDW отвечает ошибкой доступа, а не отсутствием данных, поэтому симптом читается как «сломался запрос», а не «нет прав».Что в PR
194_grant_ekb_districts_fdw.sql— сам грант. Идемпотентен.GRANTдописан в конец74_dedupe_unified_views.sql, рядом сCREATE, чтобы объект и его права ехали вместе.Честно про п.2: на действующем проде эта строка не выполнится никогда — деплой применяет только файлы, которых ещё нет в
_schema_migrations, а 74-я давно записана. Всю работу делает 194-я. Строка в 74-й нужна для чистой базы и для ручного прогона файла. Это прямо написано в комментарии, чтобы следующий читатель не решил, что фикс двойной.Приёмка на проде (числом, после деплоя)
foreign table tradein.gendesign_ekb_districts_geom падала с «permission denied for view ekb_districts_geom». Замер: has_table_privilege('tradein_fdw_reader', 'public.ekb_districts_geom','SELECT') = false, при том что все четыре соседних объекта того же FDW-сервера (rosreestr_deals, mv_quarter_price_index, v_tradein_cad_buildings, v_tradein_osm_poi_ekb) грант имеют. Грант не «потерялся» — его не выдавали никогда: 74_dedupe_unified_views.sql меняет тип объекта (DROP TABLE + CREATE OR REPLACE VIEW), то есть создаёт его заново, а строки GRANT рядом не было. Тот же класс, что #2583. Приёмка на проде после деплоя: тот же has_table_privilege обязан вернуть true, а SELECT count(*) FROM gendesign_ekb_districts_geom — 8 вместо ошибки.