Aventuras com Alembic e Oracle conteinerizado
Estava desenvolvendo uma aplicação com python+alembic e utilizando PostgreSQL como banco de dados. No meio do caminho foi necessário mudar para Oracle e adicionar uma coluna a um modelo do banco. Até aqui, nada de anormal, eis que tento gerar as database migrations automaticamente com o alembic e ele gera o comando para criar a tabela inteira novamente...
Googles, Bings, Stacks Overflows e outros links depois, nenhum deles resolvia o meu problema. Tanto o Oracle quanto o PostgreSQL no ambiente de desenvolvimento local rodam em conteineres, no PostgreSQL esse problema não se manifestava, somente no Oracle.
Bem... eis que vou ao código-fonte do alembic para ver o que poderia ser e me deparo com a consulta feita para detectar as tabelas já existentes e suas colunas, índices e outros itens, executo a consulta no banco Oracle local e nada é retornado... estranho.
Pois bem, o Oracle em docker utiliza o tablespace system sempre... e a consulta do alembic desconsidera esse tablespace... bingo!
A solução foi simples, no script de inicialização da base de desenvolvimento, criei um tablespace específico e problema resolvido. O script compartilho abaixo:
-- Coloque scripts iniciais aqui
ALTER SESSION SET container=APPDBDEV;
-- Alembic FIX :)
CREATE TABLESPACE dbuser
DATAFILE 'dbuser.dbf'
SIZE 200M
autoextend ON maxsize 2000M
ONLINE
;
CREATE USER dbuser identified BY dbuser DEFAULT tablespace dbuser;
ALTER USER dbuser quota UNLIMITED ON dbuser;
GRANT CONNECT, RESOURCE TO dbuser;
GRANT CREATE SESSION TO dbuser;