Unificando bases de dados com Schemas

Aqui explico como organizar diversos bancos de dados PostgreSQL utilizando o conceito de Schemas. A idéia é centralizar varias bases de sistemas distintos em um único banco, centralizando todo o seu gerenciamento.

[ Hits: 15.617 ]

Por: Fábio Telles Rodriguez em 11/01/2007 | Blog: http://savepoint.blog.br


Parte I - Preparação



Neste processo iremos:
  • Criar um novo banco de dados destinado a ser o "Banco de Dados Central";
  • Criar tablespaces para tabelas e índices e fazer com que todos os índices e tabelas de todos os sistemas armazenem seus dados nas suas respectivas tablespaces;
  • Centralizar toda a codificação de caracteres para todos os sistemas em UTF8;
  • Utilizar apenas um usuário administrador, o postgres para todos os sistemas;
  • Utilizar um usuário e um schema com o mesmo nome para cada sistema a ser utilizado pelo desenvolvedor para criar os objetos do sistema;
  • Utilizar um ou mais usuários para a aplicação com permissões restritas em cada objeto a ser utilizado;

Para isto, utilizaremos o PostgreSQL 8.1 rodando em Linux. No entanto, a maioria das coisas aqui descritas se aplicam a outros sistemas operacionais no padrão POSIX (Linux, BSDs, Solaris, etc) e versões 8.x do PostgreSQL.

Parte I - Preparação

1. Criar tablespaces:

Antes mesmo de criar nosso banco de dados centralizado, criaremos os tablespaces a serem utilizados. Mesmo que você não possua vários discos ou arrays distintos para armazenar os seus dados, é importante já começar a preparar os seus sistemas para isto. Conforme eles crescem você deverá precisar de mais storage. Separar os logs, tabelas e índices e unidades físicas distintas costuma ser a providência número um para aumentar a performance.

É claro que sistemas maiores podem utilizar tablespaces separados para cada sistema ou para tabelas e índices com dados históricos (utilizando o particionamento de tabelas) para aumentar ainda mais o desempenho. Como nosso tópico principal aqui não é o tunning, não nos aprofundaremos no assunto aqui.

Criaremos as seguintes tablespaces básicas:
  • Uma tablespace para tabelas chamada tbs_tables
  • Uma tablespace para índices chamada tbs_indexes

Antes de criar sua tablespace, você deve entender que o PostgreSQL 8.x trata cada tablespace como um diretório no seu sistema de arquivos. Portanto é preciso criar os diretórios no seu sistema operacional antes de criar os tablespaces. Também é preciso garantir a permissão de leitura e gravação nas pastas recém criadas. O local onde você irá criar seus tablespaces depende da forma como você deseja organizar sua estrutura de diretórios. Aqui, criaremos uma pasta específica para isso, na raiz. Na sua linha de comando digite:

$ su
# su postgres
$ cd /
$ mkdir postgresql
$ cd postgresql
$ mkdir tablespaces
$ cd tablespaces
$ mkdir tables
$ mkdir indexes


Feito isto, você pode se conectar ao psql e criar os tablespaces:

$ psql > CREATE TABLESPACE tbs_tables OWNER postgres LOCATION '/postgresql/tablespaces/tables';
> CREATE TABLESPACE tbs_indexes OWNER postgres LOCATION '/postgresql/tablespaces/indexes';

2. Criar o banco de dados central:

Feito isto, criaremos o banco de dados que servirá para para centralizar todos os seus bancos de dados. Para isto utilizarei a opção '-D' para definir um tablespace padrão a ser utilizado em todos os objetos que não especificarem um tablespace padrão. Outra opção importante é o '-E' onde especifico o tipo de codificação de caracteres.

$ createdb -D tbs_tables -E utf-8 nome_do_banco

3. Criar role padrão para desenvolvedores:

O próximo passo é criar um role que será utilizado por todos os usuários que poderão criar objetos no banco. Note que este role não será utilizado para se logar no banco e sim para que novos usuários herdem suas permissões. Concederemos permissão para:
  • Criar objetos no banco de dados recém criado;
  • Criar objetos nos tablespaces tbs_tables e tbs_indexes.

> CREATE ROLE developer WITH NOLOGIN;
> GRANT CREATE ON DATABASE nome_do_banco TO developer;
> GRANT CREATE ON TABLESPACE tbs_tables TO developer;
> GRANT CREATE ON TABLESPACE tbs_indexes TO developer;


    Próxima página

Páginas do artigo
   1. Parte I - Preparação
   2. Parte II - Unificando os bancos de dados
Outros artigos deste autor

Checklist de performance do PostgreSQL 8.0

Leitura recomendada

PostgreSQL 9.4 - O conceito de Role

PostgreSQL - Instalação inicial no Debian Wheezy 64 bits

PostgreSQL: comandos básicos

Sincronizando Dados do PostgreSQL no Elasticsearch

Replicação de dados síncrona com Postgres

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário