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:
- Kenia Milene G.’s Blog – Alterando Tablespace de Tabelas e Indices no PostgreSQL
- PostgreSQL Manuals – Tablespaces
- PostgreSQL BR – Tablespaces no PostgreSQL
- Devmedia – Tablespace
Semana que vem irei abordar o funcionamento das triggers!
Abraços,