PostgreSQL: O que são tablespaces?

Olá meus queridos!

Na semana passada eu abordei a questão dos índices no PostgreSQL, onde citei que eles podem estar dentro de um dado tablespace, pois bem, neste artigo irei abordar como funciona e para que você pode utilizar esse fantástico recurso do nosso querido Sistema Gerenciador de Banco de Dados – Postgres.

Você se lembra dos Schemas, que fazem a divisão lógica do banco? Pois bem, um tablespace faz a divisão física, isto é, podemos determinar onde os elementos do banco de dados – leia-se tabelas e índices – irão ficar. Mas como assim “irão ficar”? Simples: você pode definir um dado lugar no disco rígido, ou até mesmo outro disco!

Imagine que você tem um índice que é muito acessado e uma tabela que muito raramente é acessada, pois bem, você pode colocar esse índice em um disco SCSI e a tal tabela em um HD SATA comum, tendo em vista que o adaptador SCSI é muito veloz em comparação com o SATA. Fazendo isso você terá um ganho de desempenho muito significativo.

Veja abaixo as instruções SQL para a manipulação dos tablespaces.

Sintaxe para a criação de um tablespace:

CREATE TABLESPACE “hd_scsi” LOCATION '/mnt/seu_scsi'

Criar tabela dentro de um dado tablespace:

CREATE TABLE foo (
    id integer,
    nome varchar(150),
    primary key(id)
) TABLESPACE hd_scsi;

Veja como alterar um índice de tablespace:

SELECT ‘ALTER INDEX’, n.nspname AS schemaname , ‘.’ ,c.relname AS tablename, ‘SET TABLESPACE hd_scsi;’
FROM pg_class c
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_tablespace t ON t.oid = c.reltablespace
LEFT JOIN pg_index x ON x.indexrelid = c.oid
WHERE c.relkind = ‘i’::”char”
AND x.indisprimary != ‘t’
AND x.indisunique != ‘t’
AND nspname NOT IN
(‘dbateste’,'information_schema’,'pg_catalog’,'pg_temp_1′,’pg_toast’,'postgres’,'publico’,'public’)
ORDER BY n.nspname

Veja como alterar uma tabela de tablespace:

SELECT 'ALTER TABLE' ,n.nspname AS schemaname,’.', c.relname AS tablename, ‘SET TABLESPACE hd_scsi;’
FROM pg_class c
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_tablespace t ON t.oid = c.reltablespace
WHERE c.relkind = ‘r’::”char”
AND nspname NOT IN
(‘dbateste’,'information_schema’,'pg_catalog’,'pg_temp_1′,’pg_toast’,'postgres’,'publico’,'public’)
ORDER BY n.nspname

Referências:

Semana que vem irei abordar o funcionamento das triggers!

Abraços,

Tiago.

Add a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *