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.

Publicado por

Prof. Me. Tiago A. Silva

Prof. Me. Tiago A. Silva

Mestre em Tecnologia (UNICAMP, 2018), Licenciado em Computação e Pedagogia (Claretiano, 2017 e 2018, respectivamente), Especialista em Desenvolvimento de Software para Web com ênfase em Java (UNIFEG, 2015), Especialista em Educação a Distância (FACEL, 2017) e Tecnólogo em Informática para Gestão de Negócios (FATEC Mococa, 2010). Atualmente sou Professor no Ensino Técnico no Centro Paula Souza. Já atuei como Professor no Ensino Superior no Centro Universitário Moura Lacerda (2017), Programador de Sistemas na Prefeitura de Cajuru (2014-2017), além de possuir 11 anos de experiência em desenvolvimento web trabalhando com diversas ferramentas e frameworks.

Deixe uma resposta

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