📦 Como mover uma tabela de um schema para outro no PostgreSQL
Organizar tabelas em schemas é uma prática essencial para manter bancos de dados grandes bem estruturados — especialmente em aplicações com múltiplos módulos, equipes ou microserviços.
Mas o que fazer quando você precisa mover uma tabela existente para outro schema? Felizmente, o PostgreSQL oferece um comando simples e poderoso para isso.
✅ Comando oficial: ALTER TABLE ... SET SCHEMA
Para mover uma tabela de um schema para outro, basta executar:
ALTER TABLE schema_atual.nome_da_tabela
SET SCHEMA novo_schema;
📌 Exemplo prático
Mover a tabela usuarios de public para app_core:
ALTER TABLE public.usuarios
SET SCHEMA app_core;
📁 O que acontece quando você move uma tabela?
- As constraints (PK, FK, UNIQUE) vão junto automaticamente ✔️
- As foreign keys continuam funcionando ✔️
- Views e funções que referem o schema antigo podem parar de funcionar ⚠️
- Triggers, policies e permissões seguem anexadas à tabela ✔️
Ou seja: o PostgreSQL move toda a estrutura interna de forma segura, mas você precisa revisar apenas objetos que usam o nome qualificado do schema.
🔎 Verificando dependências antes de mover
Quer saber onde a tabela está sendo usada?
SELECT *
FROM pg_depend d
JOIN pg_class c ON d.refobjid = c.oid
WHERE c.relname = 'usuarios';
Isso ajuda a identificar views, funções ou objetos que referenciam a tabela.
🚚 Mover todas as tabelas de um schema automaticamente
Se você precisa mover várias tabelas de uma vez, use o bloco DO abaixo:
DO $$
DECLARE r RECORD;
BEGIN
FOR r IN
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public'
LOOP
EXECUTE format('ALTER TABLE public.%I SET SCHEMA app_core;', r.tablename);
END LOOP;
END$$;
Simples e eficiente para reorganizar um banco inteiro.
🏗️ Quando faz sentido mover tabelas para outro schema?
- Separar tabelas internas das tabelas da aplicação
- Organizar módulos diferentes (ex.:
financeiro,usuarios,core) - Melhorar segurança com permissões por schema
- Evitar poluição do schema
public
Criar schemas bem definidos melhora a manutenção, a governança de dados e a colaboração entre equipes de desenvolvimento.
🎯 Conclusão
Mover tabelas entre schemas no PostgreSQL é simples com ALTER TABLE ... SET SCHEMA,
e essa prática ajuda a manter sua estrutura de banco de dados limpa, organizada e modular.
Se você utiliza Django, Supabase ou microserviços, separar suas tabelas em schemas diferentes pode ser um grande avanço na arquitetura do projeto.
Gostou do conteúdo? Compartilhe com outros desenvolvedores! 🚀
📦 PostgreSQL: Movendo Tabelas Entre Schemas
1️⃣ Comando Principal
ALTER TABLE schema_atual.tabela SET SCHEMA novo_schema;
✔ Simples, rápido e seguro.
✔ Move a tabela inteira, incluindo PK, FK, UNIQUE e índices.
2️⃣ O que Acontece ao Mover?
- 🔗 FKs, PKs e UNIQUE vão junto automaticamente.
- 🏷 Views e funções que referem o schema antigo podem precisar de ajuste.
- ⚙ Permissões e triggers permanecem funcionando.
3️⃣ Verificar Dependências Antes
SELECT * FROM pg_depend d JOIN pg_class c ON d.refobjid = c.oid WHERE c.relname = 'nome_da_tabela';
🔍 Útil para localizar views, triggers e funções dependentes.
4️⃣ Mover Todas as Tabelas de um Schema
DO $$
DECLARE r RECORD;
BEGIN
FOR r IN
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public'
LOOP
EXECUTE format('ALTER TABLE public.%I SET SCHEMA app_core;', r.tablename);
END LOOP;
END$$;
🚚 Excelente para reorganizar o banco inteiro.
5️⃣ Quando Usar Schemas Separados?
- 📁 Separar tabelas internas e tabelas de aplicação.
- 🧩 Organizar módulos (financeiro, usuários, core etc.).
- 🔐 Melhorar segurança com permissões por schema.
- 🧹 Evitar poluição do schema
public.
🎯 Dica Final
Use schemas para modularidade, segurança e organização do banco.
Mover tabelas é seguro e simples com SET SCHEMA.


Nenhum comentário:
Postar um comentário