O que é provisioning
Provisioning cria automaticamente toda a infraestrutura de banco de dados para um novo tenant:
- Clona o schema template do Group para um novo schema isolado (
clone_schema_to_tenant) - Cria a role Postgres exclusiva do tenant (
proj_<group>_<tenant>_service) - Aplica os GRANTs corretos (a role do tenant só acessa seu próprio schema)
- Registra o tenant em
proj_management.group_tenants
Tempo médio: 1–3 segundos. O processo é idempotente — chamar duas vezes com o mesmo slug não duplica o schema.
Via Admin UI
- Acesse Platform → Groups → [nome do group] → Tenants.
- Clique em + Novo Tenant.
- Preencha:
- Slug: identificador do tenant (ex:
empresa-xyz). Usado no nome do schema. - Nome: nome legível (ex: "Empresa XYZ Ltda").
- Email do owner: email do administrador do tenant (opcional).
- Slug: identificador do tenant (ex:
- Clique em Provisionar.
- Aguarde o status Ativo. O schema
proj_<group>_<tenant>está pronto.
Via API
curl -X POST \
https://superdb.com.br/platform/v1/groups/crm-saas/tenants \
-H "Authorization: Bearer $PLATFORM_ADMIN_JWT" \
-H "Content-Type: application/json" \
-d '{
"slug": "empresa-xyz",
"display_name": "Empresa XYZ Ltda",
"owner_email": "admin@empresa-xyz.com.br"
}'
{
"id": "ten_01HYZ...",
"slug": "empresa-xyz",
"display_name": "Empresa XYZ Ltda",
"schema_name": "proj_crm-saas_empresa-xyz",
"status": "active",
"provisioned_at": "2026-05-14T10:05:00Z"
}
Troubleshooting
Timeout durante provisioning
O schema template é clonado com todas as tabelas. Se o template for muito grande (>500 tabelas), o processo pode demorar mais. Verifique nos logs: docker logs auth --tail=50 | grep "clone_schema". O timeout padrão é 30 segundos — aumente via variável PROVISION_TIMEOUT_MS se necessário.
Erro: schema já existe
O slug informado já foi usado anteriormente. Escolha um slug diferente ou delete o tenant existente antes de recriar.
GRANTs não aplicados
Verifique se a migration de GRANTs do platform_admin foi aplicada no banco. Execute:
SELECT has_schema_privilege(
'proj_crm-saas_empresa-xyz_service',
'proj_crm-saas_empresa-xyz',
'USAGE'
);
Se retornar false, re-execute a migration de GRANTs ou contate o suporte.