No último artigo, conversamos sobre a criação de um servidor PostgreSQL no Azure, e nos conectamos a ele através do pgAdmin.
Neste artigo, gostaria de conversar sobre alguns objetos do PostgreSQL que são muito importantes para que possamos utilizá-lo corretamente.
Tablespace
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 pertença 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 três opções que eu gosto!
- 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, 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) e podem ser a primary key ou parte dela, e também ter valores únicos e 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), é a possibilidade de 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 legais!
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 e-mail – 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 confira o vídeo no meu canal.
Conclusão
No PostgreSQL temos alguns objetos que são extremamente importantes e foram apresentados neste artigos.
Desejo a todos uma excelente semana!