Единая схема Postgres Alembi c Автоматическая миграция - PullRequest
0 голосов
/ 06 августа 2020

У меня есть сервер Postgres, на котором у нас есть одна база данных. Эта база данных - наше хранилище данных. У нас есть схема для каждого программного приложения в этой базе данных.

Я работаю над новым проектом, в котором я использую sqlalchemy alembi c для создания миграций схемы. Однако из-за способа настройки моей БД ... похоже, что опция --autogenerate генератора ревизий сканирует все схемы в базе данных.

Я не могу найти вариант, чтобы ограничить проверка только по одной схеме. Единственный вариант, который я нашел, - это создать функцию для передачи в параметр Inclue_object в контексте alembi c. Таким образом, alembi c будет сканировать все схемы, но будет использовать схему / таблицы только в том случае, если эта функция вернет true. Это далеко не идеально, потому что у меня сотни таблиц ... так что этот процесс медленный.

def include_object(object, name, type_, reflected, compare_to):
    print(object, name, type_, reflected, compare_to)
    if type_ == 'table' and object.schema != 'leads_manager':
        print('returning false')
        return False
    else:
        print('returning true')
        return True

def run_migrations_offline():
    url = get_db_uri()
    context.configure(
        url=url,
        target_metadata=target_metadata,
        include_object=include_object,
    )

    with context.begin_transaction():
        context.execute('SET search_path TO leads_manager')
        context.run_migrations()

Кто-нибудь знает, как ограничить автогенерацию alembi c только одной схемой в postgres?

1 Ответ

0 голосов
/ 15 августа 2020

Я закончил тем, что создал пользователя, который имеет доступ только к моей интересующей схеме. Alembi c --autogenerate затем проверяет только эту схему, поскольку она не имеет доступа ни к каким другим.

...