Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Artigo SQL Magazine 69 - A Estrutura Lógica do PostgreSQL
Este artigo demonstra como o PostgreSQL gerencia sua estrutura lógica.
[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da SQL Magazine 69
A Estrutura Lógica do PostgreSQL
Em nosso último artigo (SQL Magazine n° 65) descrevemos a estrutura física do PostgreSQL, ou seja, como o SGBD trata da forma como os arquivos são criados, gerenciados e organizados fisicamente no sistema de arquivos do sistema operacional.
Mas não há como falar sobre a estrutura física sem descrever também a lógica, que compreende a estrutura usada para organizar os dados (tablespaces e esquemas) que podem ou não estar relacionadas com a estrutura física.
Neste artigo descreveremos inicialmente como o PostgreSQL gerencia os tablespaces, relacionando-os com a parte física do banco. Depois mostraremos como se comportam os esquemas dentro do SGBD e como os mesmos podem ser usados para facilitar as divisões dos vários objetos da base de dados. E por fim, falaremos superficialmente sobre o esquema onde é armazenado o catálogo ou dicionários de dados do PostgreSQL.
Tablespaces
A partir da versão 8.0 do PostgreSQL, foram incluídas várias funcionalidades importantes. Uma destas melhorias diz respeito ao gerenciamento dos discos, permitindo assim, selecionar os sistemas de arquivos que irão armazenar as informações e objetos das bases de dados como esquemas, tabelas e índices.
O conceito segue o mesmo princípio do Oracle, com uma diferença: um tablespace no Oracle é formado por um ou mais arquivos localizados em um determinado sistema de arquivos. Já no PostgreSQL, um tablespace é apenas um lugar, onde serão armazenados os objetos.
Com o controle em mãos do layout organizacional das bases de dados em disco, podemos usar o conceito do tablespace para:
· Melhoria de performance: O DBA pode usar o conhecimento do uso dos objetos de um banco de dados para otimizar determinados pontos em que existem problemas de performance. Pode-se, por exemplo, colocar um índice bastante acessado em um disco mais rápido. Assim como uma tabela que não é muito acessada pode ser colocada em um disco mais lento;
· Gerenciamento de espaço: Se o disco ou partição estiver com problema de espaço e não for possível aumentar o mesmo, pode-se criar um tablespace em outra partição e mover algumas tabelas para esta nova partição até que o sistema de disco possa ser reconfigurado.
Normalmente, não há necessidade de montar mais de um tablespace por sistema de arquivo lógico, pois não podemos controlar o local dos arquivos individuais dentro do filesystem. Porém, no PostgreSQL, não existe tal limitação, e realmente não é necessário se preocupar com os limites do sistema de arquivo, pois o tablespace apenas armazena os arquivos no diretório apontado por ele.
Para criar um novo tablespace, usamos o comando abaixo, onde a parte interessante do comando é a cláusula LOCATION, que diz onde serão armazenados os objetos do tablespace criado.
CREATE TABLESPACE tablespacename [ OWNER username ] LOCATION 'directory'
Alternativamente, pode-se usar o parâmetro default_tablespace, contido no arquivo de configuração do PostgreSQL, postgresql.conf. Quando este parâmetro é configurado com o nome de um tablespace existente no cluster, este tablespace é usado nos comandos CREATE TABLE e CREATE INDEX, que não possuem uma cláusula TABLESPACE explícita (Listagem 1).
O uso do parâmetro default_tablespace é particularmente útil quando desejamos que qualquer objeto criado, que não possua uma cláusula TABLESPACE explícita, seja direcionado para um tablespace default da nossa escolha, e não do SGBD, controlando assim, a organização dos objetos.
Outro motivo para uso deste parâmetro é simplesmente a comodidade de não precisar escrever a cláusula TABLESPACE nos comandos. Isto é válido apenas quando possuímos apenas um tablespace criado e queremos direcionar todos os objetos para o mesmo.
-- CREATE TABLE com cláusula TABLESPACE explícita
CREATE TABLE tb_usuario (data VARCHAR) TABLESPACE tbl_sql_magazine;
Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Clailson De Almeida
Graduado em Tecnologia em Processamento de Dados e pós-graduado em Administração de Banco de Dados pela Universidade Tiradentes (UNIT), no estado de Sergipe. Já atuou como desenvolvedor WEB, com forte utilização de Java. Já trabalhou 2 anos como Analista de Sistemas e possui experiência no desenvolv...
1 COMENTÁRIO
Gostaria de tecer alguns comentários sobre o artigo intitulado A Estrutura lógica do PostgreSQL. Em primeiro lugar, gostaria de parabenizar o autor pela iniciativa de escrever um artigo sobre este tema, que é um tema bastante interessante. Porém, durante a leitura percebi algumas coisas e gostaria de comentar aqui: Nos exemplos em que o autor apresenta como executar a criação de um tablespace, a localização (parâmetro LOCATION do comando CREATE TABLESPACE) está sem aspas simples (''''''''), e isso gera um erro de sintaxe no momento tal operação. Na página 126 o autor faz referência a tabela pg_group, que na verdade não é uma tabela e sim uma view sobre a tabela do catálogo pg_authid (versão >= 8.1).
Uma coisa que seria interessante ser apresentada neste artigo é que é possível criar um banco associado a um tablespace, a partir do comando CREATE DATABASE. Também seria interessante mostrar como fazer a mudança de uma tabela que se encontra em um tablespace para um outro tablespace a partir do comando ALTER TABLE, caso seja um índice isso é possível através do comando ALTER INDEX e assim para outros objetos, somente o tablespace de um banco de dados é que não pode ser alterado. Seria útil e bastante interessante sob o meu ponto de vista, o artigo apresentar como identificar a partir de consultas as tabelas de sistema quais objetos estão em quais tablespaces e se um banco está ou não associado a um tablespace. O mesmo procedimento poderia ser descrito para os esquemas, isto é, como alterar um objeto de esquema e também utilizando as tabelas de sistema mostrar em que esquemas estes objetos estão. Claro que estas informações via PGAdmin são fáceis de se observar, basta clicar no esquema e pronto, lá esta a informação, mas acredito que seria interessante sob um outra ótica mostrar isso através das tabelas de sistema e como obter estas informações a partir do catálogo do PostgreSQL.



