quarta-feira, dezembro 17, 2025

Como mover uma tabela de um schema para outro no PostgreSQL 📦


📦 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






Busca do Google

Custom Search