mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-06 01:24:59 +03:00
- каталог code/custocrm → code/chatballs; CLI custocrm → chatballs; пакеты hub_platform → chatballs, hub_backend → chatballs_backend (app labels прежние) - переменные CUS_* и CUSTOCRM_* → CHATBALLS_*; образы chatballs-*; compose-проект и база chatballs (были edevs_hub); роли Postgres chatballs_* (были custocrm_*); схема RLS chatballs и GUC chatballs.organization_id; cookie chatballs_* - CI: APP_DIR code/chatballs, DEPLOY_ROOT /opt/chatballs - deploy/migrate/rename-to-chatballs.sh — миграция существующей установки без потери данных: остановка старого проекта, .env (с резервной копией), переименование суперпользователя initdb через временную роль, остальных ролей, базы, схемы и функции RLS; проверено на локальном стеке - dev-стек хранит Postgres в bind-mount data/postgres, как prod (именованный том compose.dev был устаревшим снимком и вводил в заблуждение) - снятие демо удаляет объекты, созданные поверх демо-данных тестировавшим (звонки по демо-диалогу), вместо падения на PROTECT - реальные домены *.custocrm.ru и идентификаторы документов не тронуты Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
63 lines
3.1 KiB
SQL
63 lines
3.1 KiB
SQL
-- Нормализация владельца объектов public-схемы под роль миграций.
|
|
--
|
|
-- Контекст: при раздельных ролях (chatballs_migration / chatballs_app /
|
|
-- chatballs_platform) Django-миграции от migration-user требуют, чтобы
|
|
-- выполняющий был ВЛАДЕЛЬЦЕМ изменяемой таблицы («must be owner of table …»).
|
|
-- Таблицы, созданные/импортированные иначе (суперпользователем postgres,
|
|
-- app-role или до ввода разделения ролей), оказываются «осиротевшими», и
|
|
-- AddField/AlterField на них падает в deploy.
|
|
--
|
|
-- Скрипт переписывает владение всей public-схемы на chatballs_schema — роль,
|
|
-- в которую входит chatballs_migration (см. init-runtime-roles.sh). После этого
|
|
-- любой migration-user может мигрировать любые таблицы.
|
|
--
|
|
-- Выполнять под суперпользователем postgres (не под app/migration role):
|
|
-- docker compose exec -T postgres psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" \
|
|
-- < deploy/postgres/reassign-schema-ownership.sql
|
|
--
|
|
-- Идемпотентен: повторный запуск безопасен. Затрагивает только схему public.
|
|
|
|
\set ON_ERROR_STOP on
|
|
|
|
-- 1. Таблицы, последовательности, функции, типы → chatballs_schema.
|
|
ALTER SCHEMA public OWNER TO chatballs_schema;
|
|
|
|
DO $$
|
|
DECLARE
|
|
r RECORD;
|
|
BEGIN
|
|
-- Таблицы.
|
|
FOR r IN
|
|
SELECT tablename FROM pg_tables WHERE schemaname = 'public'
|
|
LOOP
|
|
EXECUTE format('ALTER TABLE public.%I OWNER TO chatballs_schema', r.tablename);
|
|
END LOOP;
|
|
|
|
-- Последовательности (включая owned-последовательности таблиц).
|
|
FOR r IN
|
|
SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = 'public'
|
|
LOOP
|
|
EXECUTE format('ALTER SEQUENCE public.%I OWNER TO chatballs_schema', r.sequence_name);
|
|
END LOOP;
|
|
|
|
-- Функции/процедуры в public.
|
|
FOR r IN
|
|
SELECT p.oid, p.proname, pg_get_function_identity_arguments(p.oid) AS args
|
|
FROM pg_proc p
|
|
JOIN pg_namespace n ON n.oid = p.pronamespace
|
|
WHERE n.nspname = 'public'
|
|
LOOP
|
|
EXECUTE format('ALTER FUNCTION %s(%s) OWNER TO chatballs_schema', r.proname, r.args);
|
|
END LOOP;
|
|
END $$;
|
|
|
|
-- 2. Права по умолчанию для будущих объектов, создаваемых migration-user'ом,
|
|
-- остаются корректными (владелец = создатель, что для миграций = migration).
|
|
-- Явная выдача DDL-прав runtime-ролям не нужна и не делается (RLS-изоляция).
|
|
|
|
-- 3. Диагностика: кто чем владеет после нормализации.
|
|
SELECT tablename, tableowner
|
|
FROM pg_tables
|
|
WHERE schemaname = 'public'
|
|
ORDER BY tablename;
|