No último post conversamos sobre a criação de um servidor PostgreSQL no Azure, e nos conectamos a ele através do pgAdmin.
Neste post gostaria de conversar sobre alguns objetos do PostgreSQL que são muito importantes para que possamos utilizá-lo corretamente.
Tablespace
Eu sempre associo um tablespace a um guarda-roupas. Mas de forma correta um tablespace é um nome lógico para um local no sistema de arquivos onde os objetos de banco de dados podem ser armazenados. E sendo assim no PostgreSQL no Azure você não precisará criar tablespaces.
Os tablespaces permitem que o DBA use o conhecimento do padrão de uso de objetos de banco de dados para otimizar o desempenho. Por exemplo, um índice muito usado pode ser colocado em um disco mais rápido e altamente disponível. Ao mesmo tempo, uma tabela que armazena dados arquivados que raramente são usados ou que não são críticos para o desempenho pode ser armazenada em um sistema de disco mais barato e mais lento. Simples assim! A criação correta dos tablespaces também mostra o grau de maturidade da empresa com a governança de dados. Por exemplo, podemos ter um tablespace com os dados pessoais de cidadãos brasileiros, ou seja, dados que devem estar de acordo com a Lei Geral de Proteção de Dados.
Voltando a criação, o local deve ser um diretório vazio, existente e que pertence ao usuário do PostgreSQL no sistema operacional . Todos os objetos criados posteriormente no tablespace serão armazenados em arquivos dentro desse diretório. O local não deve estar removível ou temporário, pois o cluster pode falhar se o tablespace for perdido.
Uma vez criado, um tablespace pode ser usado a partir de qualquer banco de dados, desde que o usuário solicitante tenha privilégio suficiente. Isso significa que um tablespace não pode ser excluído até que todos os objetos em todos os bancos de dados que o utilizam tenham sido removidos.
Banco de Dados
Ápice!!! Criação do banco de dados!
Embora não seja obrigatório, sempre informe o tablespace do seu banco de dados! Sejamos organizados desde o começo.
A sintaxe do PostgreSQL para criar bancos de dados é simples, mas eu destaco aqui 3 opções que eu acho fofinhas!
- TEMPLATE = é possível criar um banco de dados seguindo uma determinada estrutura
- CONNECTION LIMIT = Quantidade máxima de conexões simultâneas no banco de dados. Cuidado com este parâmetro porque ele pode ocasionar erros se você especificá-lo de forma incorreta.
- IS_TEMPLATE = indica se o banco de dados que está sendo criado é somente um template.
Schemas
Assim como eu sempre associo um tablespace a um guarda roupas, associo os schemas às gavetas.
Eles são containers de objetos, e sendo assim devem ser criados de forma responsável, para permitir a melhor governança dos dados.
Um banco de dados contém um ou mais schemas nomeados , que por sua vez contêm vários objetos. O mesmo nome de objeto pode ser usado em esquemas diferentes sem conflito; por exemplo, ambos schema1 e myschema podem conter tabelas nomeadas mytable. Ao contrário dos bancos de dados, os esquemas não são rigidamente separados: um usuário pode acessar objetos em qualquer um dos esquemas no banco de dados ao qual eles estão conectados, se eles tiverem privilégios para isso.
Existem várias razões pelas quais alguém pode querer usar esquemas:
- Permitir que muitos usuários usem um banco de dados sem o trabalho de um interferir no do outro.
- Organizar objetos de banco de dados em grupos lógicos para torná-los mais gerenciáveis.
- Os aplicativos de terceiros podem ser colocados em esquemas separados para que não colidam com os nomes de outros objetos.
Tabelas e colunas
Uma tabela é um objeto composto por linhas e colunas, onde os dados são armazenados.
Para manter seu BD organizado e bem fofo, ao criar uma tabela defina qual o schema dela.
As colunas que existem em uma tabela são nomeadas, podem ter um valor default, podem ser obrigatórias ou não (null ou not null), podem ser a primary key ou parte dela, podem ter valores únicos e tem um tipo de dados.
Índices
Pense em um livro… o índice serve para te ajudar a localizar de forma rápida uma determinada informação.
Em uma tabela índices são estruturas que organizam referências para a localização dos dados das tabelas. No PostgreSQL uma coisa que eu acho bem bacana (e perigosa também), que é a possibilidade escolher o algoritmo que será usado para realizar a busca dos dados.
Views
Uma view é um comando, ou seja, a view não é materializada fisicamente. Em vez disso, a consulta é executada toda vez que a view é referenciada.
Domínios
No meu mestrado pesquisei muito sobre qualidade de dados, e nem preciso dizer que acho os domínios fofos!
Um domínio é essencialmente um data type com restrições no conjunto de valores permitidos.
Os domínios são úteis para abstrair restrições que são comuns a várias colunas em um único local para manutenção. Por exemplo, várias tabelas podem conter colunas de endereço de email, todas exigindo a mesma restrição CHECK para verificar a sintaxe do endereço. Defina um domínio em vez de configurar a restrição de cada tabela individualmente.
Demo
Para acompanhar a criação de todos estes objetos veja o vídeo no meu canal 🙂
Conclusão
No PostgreSQL temos alguns objetos que são extremamente importantes e foram apresentados neste post.
Desejo a todos uma excelente semana!
Agenda
Dia 24/11 estarei no SQL Saturday RJ, palestrando sobre Lei Geral de Proteção de Dados
Cursos
Semana de black friday!
Dia 01/12 eu e a Sulamita Dantas estaremos em BH dando um super curso de MongoDB! As inscrições para as últimas vagas estão abertas e podem ser feitas no link bit.ly/mongodb_bh
Referências
https://www.postgresql.org/docs/10/manage-ag-tablespaces.html