1
resposta

Separar banco de dados pgadmin4

Olá, como vai? Espero que tudo bem.

Trabalho em uma empresa SaaS onde temos um banco de dados geral com todas as informações de contas de organizações cliente.

Esses dados estão em PostgreSQL e os acesso pelo pgadmin4

Estou com uma task de separar esse banco de dados em um banco de dados específico para cada organização cliente.

Qual a forma mais eficiente para fazer isso?

Já tentei duas abordagens de código no python:

  1. Uma que criava o banco cliente, gerava o usuario e a senha do cliente, tentava criar as tabelas e importar do banco fonte os dados filtrados para a organização. -> Esse da problemas de Dict

  2. Uma que criava o banco do cliente, gerava o usuario e a senha do cliente, exportava a tabela fonte filtrada para a organização como CSV, criava as tabelas no banco da organização e importava o CSV dentro. -> Esse tem problemas recursivos com valores NULL

Nenhum dos dois códigos funcionou, e acredito que o problema esteja nas relações das tabelas. (Primary e Foreign keys).

De qualquer forma, gostaria de saber se existe uma forma mais fácil de alcançar meu objetivo seja dentro do próprio pgadim4, que não domino, ou com códigos mais simples de python.

Exemplo de estrutura que quero puxar:

Primary key -> Organization_sector - Tabela primária que referencia todas as outras

Foreign keys: Organization_industry -> FK de Organization_sector

Organization_organizations -> FK de Organization_industry

Organization_organizationskpi -> FK de Organizations_organizations

Datapoints_datapoints -> FK de Organization_organizationskpi

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oi, Pedro, tudo bem?

Nesse tipo de cenário, uma abordagem é não usar CSV nem scripts Python diretos, mas aproveitar os próprios recursos do PostgreSQL. O ideal é dividir o processo em etapas: primeiro você cria o banco e o usuário de cada cliente, depois restaura apenas a estrutura das tabelas (sem foreign keys e índices). Assim, garante que o banco esteja pronto para receber os dados sem travar em dependências.

Na sequência, os dados devem ser copiados respeitando a ordem das relações, começando pela tabela raiz (no seu caso, organization_sector) e descendo até as que dependem dela. Assim você garante que cada foreign key sempre encontra a chave de referência no momento da inserção. Só depois disso você recria as constraints e índices, validando as FKs no final.

O pgAdmin4 já, no Backup/Restore você pode exportar apenas o “pre-data” (estrutura básica) e depois o “post-data” (constraints e índices). Outra alternativa é usar extensões como postgres_fdw, que permitem conectar o banco novo ao banco central e puxar os dados direto com filtros, sem precisar converter para CSV.

Esse fluxo pode evitar os problemas que você mencionou com NULL e chaves quebradas, além de ser mais fácil de manter caso tenha que repetir o processo para várias organizações.

Boa sorte!

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!