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;

por Oibaf Ilosamart

LinkedIn | GitHub | GitLab | Mastodon