Olá a todos, é muito bom ver como o mundo PostgreSQL vem crescendo a cada dia! Era normal pensarmos em Banco de Dados comercial como sinônimo de segurança, features e estabilidade. Porém, com o amadurecimento do mundo Open Source (e semelhantes), os softwares estão mais poderosos e confiáveis; o PostgreSQL vem derrubar por terra toda essa afirmação arcaica de apenas SGDB pago pode ser verdade para grandes empresas

Recentemente a equipe de desenvolvimento PostgreSQL anunciou o lançamento da versão 8.0, ainda em beta test. O PostgreSQL 8.0 vem com uma série de inovações, entre elas:

  • Instalador para Windows (Nativo no Windows, sem CygWin);
  • Recuperação "point-in-time", que permite recuperar todos os dados em caso de falha do disco;
  • Aprimoramento no gerenciamento de discos, permitindo selecionar os sistemas de arquivos escolhidos para armazenar as base de dados, esquemas, tabelas e índices ( Tablespace, será visto neste artigo);
  • Melhora no gerenciamento do buffer;
  • Os tipos de coluna poderão ser modificados, usando-se "Alter Table";
  • Nova versão da linguagem de servidor PLPerl, que agora suporta triggers;
  • COPY poderá ler arquivos separados por vírgula;
  • Conceito de Tablespace (Veremos neste artigo);
  • Maior velocidade nas consultas.

Tablespace

Como sabemos, uma das features do PostgreSQL 8 é uma super melhoria no gerenciamento de discos, permitindo assim, selecionar os sistemas de arquivos que iremos armazenar as informações (isso inclui esquemas, tabelas e índices). Em outras palavras, isso significa que eu posso escolher uma determinada PASTA no servidor a qual será utilizada para armazenar uma determinada informação.

O Conceito é muito semelhante ao de tablespace do Oracle, porém, uma tablespace no Oracle é um arquivo localizado em um determinado sistema de arquivos. Já no PostgreSQL, uma tablespace é apenas um lugar no sistema de arquivos onde serão armazenados os objetos (no PostgreSQL, os objetos como tabela e índices são arquivos sem extensão e nomeados numericamente – OID – Object ID).

Este conceito é muito útil para:

  • Tuning: Podemos criar uma tablespace chamada table_index a qual está vinculada ao secundo HD e nesta tablespace armazenaremos TODOS os índices de nosso banco de dados. Com isso, o acesso à informação é mais rápido e diminui a sobrecarga do HD (e todo o conjunto lógico/físico envolvido) para ler dados e índices;
  • Gerenciamento de Espaço: Através deste conceito é possível adicionar um outro HD e criar uma nova tablespace para que as novas tabelas e índices sejam colocadas neste novo HD com o intuito de não sofrer com problemas de espaço em disco.

As tablespaces podem ter diversas utilidades, dependendo da necessidade do Administrador do SGDB. Vejamos agora como fazer isso no PostgreSQL 8.0.

OBS: Estou utilizando para tal demonstração a versão para Windows, usando o Windows 2000 Professional.

  1. Vamos criar uma pasta chamada DB_SQLMAGAZINE na unidade C:
    Criando uma pasta chamada DB_SQLMAGAZINE
  2. Agora vamos ao psql. Como ainda não tenho nenhum banco de dados criado no meu PostgreSQL, utilizarei o banco TEMPLATE1.
    Utilizando o banco TEMPLATE1

    O comando digitado foi:

    CREATE DATABASE "DB_SQL" TEMPLATE=template0 TABLESPACE=space_sqlmagazine;

    Onde:

    • DB_SQL”: Nome do Banco de Dados criado;
    • TEMPLATE=template0: Todo banco de dados PostgreSQL necessita de um banco de exemplo (template). Quando não especificado TEMPLATE=, o PostgreSQL utiliza o banco template1. O fato de estar conectado no template1 para criar a tablespace (imagens acima), faz com que este banco não possa ser usado como template, por isso, especifiquei o template0;
    • TABLESPACE=space_sqlmagazine: Finalmente, esta é a nova feature do PostgreSQL. Estou definindo aqui ONDE ficarão os objetos do DB_SQL. Neste caso, C:\DB_SQLMAGAZINE.
  3. Vamos agora exemplificar a criação de um objeto nesta Tablespace.
    Criação de um objeto nesta Tablespace

    O comando digitado foi:

    CREATE TABLESPACE space_sqlmagazine location ‘c:/DB _SQLMAGAZINE’; 

    Onde:

    • sql_magazine: Nome da Tablespace;
    • C:/DB_SQLMAGAZINE é o local que irá receber os dados. Observe que a barra está no padrão UNIX para ser compatível com qualquer Sistema Operacional.

    Vejamos o conteúdo:

    Criando o banco DB_SQL

    Veja o número 17234, ele é o OID para DB_SQL, ou seja, criamos o banco DB_SQL dentro da pasta DB_SQLMAGAZINE!

    Eu poderia fazer agora a criação de uma tabela do DB_SQL em OUTRA TABLESPACE através do comando:

    CREATE TABLE "SQL_TABELA" ("ID" serial ) TABLESPACE outra_tablespace; 

    Observe que para qualquer objeto a ser criado, é possível definir onde será armazenado o objeto no sistema de arquivos através do parâmetro TABLESPACE nome_tablespace.

    É isso aí pessoal! Espero que tenham gostado desta dica de utilização de uma FEATURE muito interessante que podemos usufruir no PostgreSQL 8.0!