api-admim/alembic/iniciar-bd-multitenat.txt

54 lines
1.9 KiB
Plaintext

- Primeiro usar a copia do arquivo ou criar uma migração vazia
alembic revision -m "Criar tabelas do schema shared"
se usar a cópia do arquivo os outros passo são desnecessários
- Ajustar imports da migração
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
import fastapi_users_db_sqlalchemy
from sqlalchemy import MetaData, schema
from app.database.models import Base
- Incluir a função para filtra os shcemas shared para criar apenas eles
def get_shared_metadata():
"""Filtra as tabelas do schema 'shared'."""
meta = MetaData()
for table in Base.metadata.tables.values():
if table.schema != "tenant": # Filtra apenas as tabelas do schema 'shared'
table.to_metadata(meta)
return meta
- Ajustar função upgrade
"""Criação do schema 'shared' e tabelas associadas."""
conn = op.get_bind()
# Criar o schema 'shared' se não existir
schema_exists_query = sa.text(
"SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'shared';"
)
result = conn.execute(schema_exists_query)
schema_exists = result.scalar() is not None
if not schema_exists:
op.execute(schema.CreateSchema("shared"))
print("Schema 'shared' criado com sucesso.")
# Criar as tabelas do schema 'shared'
metadata = get_shared_metadata()
metadata.create_all(bind=conn) # Cria as tabelas do shared
print("Tabelas do schema 'shared' criadas com sucesso.")
- Ajustar função downgrade
"""Remoção do schema 'shared' e tabelas associadas."""
conn = op.get_bind()
# Remover as tabelas do schema 'shared'
metadata = get_shared_metadata()
metadata.drop_all(bind=conn)
print("Tabelas do schema 'shared' removidas com sucesso.")
# Remover o schema 'shared'
op.execute("DROP SCHEMA IF EXISTS shared CASCADE")
print("Schema 'shared' removido com sucesso.")