fix(rls): startup-проверка schema drift — array_agg name[] приходит строкой
Шаг 0.1 (подготовка) плана production-готовности:
pg-драйвер возвращает name[] как "{a,b,c}" (нет парсера OID 1003) —
проверка находила 0 таблиц и запуск с ENABLE_RLS=true всегда падал.
Поддержаны оба формата. Проверено на копии прод-БД: app стартует,
31 таблица ENABLE+FORCE, login/search/sync работают
This commit is contained in:
@@ -931,8 +931,15 @@ async function runStartupDataPatches() {
|
||||
FROM pg_tables
|
||||
WHERE schemaname = 'public' AND tablename IN (${tableList})
|
||||
`));
|
||||
// pg-драйвер возвращает name[] строкой "{tasks,users,...}" (нет парсера для OID 1003) —
|
||||
// поддерживаем оба формата, иначе ни одна таблица не будет «найдена».
|
||||
const rawFound = (existsCheck.rows[0] as Record<string, unknown>)?.found;
|
||||
const foundTables = new Set<string>(
|
||||
((existsCheck.rows[0] as Record<string, unknown>)?.found as string[] | null) ?? []
|
||||
Array.isArray(rawFound)
|
||||
? (rawFound as string[])
|
||||
: typeof rawFound === "string"
|
||||
? rawFound.replace(/^\{|\}$/g, "").split(",").filter(Boolean)
|
||||
: []
|
||||
);
|
||||
const missingTables = ALL_RLS_TABLES.filter(t => !foundTables.has(t));
|
||||
if (missingTables.length > 0) {
|
||||
|
||||
Reference in New Issue
Block a user