Terminologias

Alguns termos são de especial importância quando tratamos da Plataforma PostgreSYS. Abaixo, disponibilizamos uma lista dos principais termos utilizados nesta documentação, com suas devidas definições e detalhamento, quando aplicável.

Algoritmo de Compactação LZ

O algoritmo LZ (Lempel-Ziv), especificamente o LZ77, é uma técnica de compactação baseada na substituição de sequências repetidas de dados por referências a uma única ocorrência anterior. Ele opera gerando códigos de tamanho fixo para sequências (palavras) de tamanho variável, registradas em uma tabela de dicionário.

Algoritmo de Compactação Zstandard (zstd)

Zstandard, ou zstd, é um algoritmo de compactação de dados de alta performance e de código aberto desenvolvido pelo Facebook. Oferece compressão sem perdas e é projetado para ser rápido tanto para compactação quanto para descompactação.

Armazenamento Chave-Valor

Um sistema de armazenamento chave-valor armazena dados como um conjunto de pares chave-valor, no qual a chave serve como um identificador único para o valor. Este tipo de armazenamento proporciona simplicidade e flexibilidade.

Arquivamento Contínuo

O arquivamento contínuo no PostgreSQL envolve a gravação de cópias dos arquivos de log transacionais (WAL) em um local secundário. Esse processo é crucial para a prevenção de perda de dados e permite a recuperação do banco de dados até um ponto no tempo (PITR).

Árvore de Pesquisa Generalizada (GiST)

GiST é uma estrutura de dados flexível que permite a implementação de uma variedade de árvores de pesquisa, como árvores B+, R-trees, entre outras. É particularmente útil para indexação de dados complexos e consultas multidimensionais.

Balanceador de Cargas

Um balanceador de cargas distribui as solicitações de rede ou aplicação entre um grupo de servidores, de forma a otimizar o uso dos recursos, maximizar a velocidade de resposta e evitar sobrecarga em qualquer servidor individual.

Banco de Dados

Um banco de dados é um conjunto organizado de dados armazenados eletronicamente, geralmente acessado e gerenciado por um Sistema de Gerenciamento de Banco de Dados (SGBD).

Backup Completo

Cópia integral de todos os dados de um sistema ou banco de dados em um determinado ponto no tempo.

Backup Diferencial

Cópia dos dados que foram alterados ou adicionados desde o último backup completo.

Backup Incremental

Cópia dos dados que foram alterados ou adicionados desde o último backup, seja ele completo ou incremental.

Catálogos

Catálogos no PostgreSQL contêm metadados que descrevem e acompanham estruturas de dados, como tabelas, índices e funções. Eles são essenciais para o gerenciamento interno e a operação do banco de dados.

Chave Estrangeira

Uma chave estrangeira é uma coluna ou um conjunto de colunas em uma tabela que referenciam a chave primária de outra tabela. Ela é usada para garantir a integridade referencial entre tabelas.

Chave Primária

A chave primária é uma ou mais colunas que identificam unicamente cada linha (tupla) em uma tabela. Ela é usada para garantir a integridade dos dados e é frequentemente referenciada por chaves estrangeiras em outras tabelas.

Checksum

Checksum é uma soma de verificação utilizada para verificar a integridade de dados. Algoritmos como MD5 e SHA são usados para gerar um valor hash único a partir de dados de entrada, permitindo a detecção de alterações nos dados.

chroot jail

Técnica de segurança que isola processos, limitando sua visão do sistema de arquivos ao diretório designado. Isso restringe o acesso do processo a um ambiente confinado.

Cluster

Um Cluster no PostgreSQL refere-se a uma coleção de bancos de dados gerenciados por uma única instância do servidor PostgreSQL.

Encoding

Encoding refere-se ao conjunto de caracteres utilizado para armazenar texto no banco de dados. O PostgreSQL suporta vários tipos de encoding, incluindo UTF-8, que permite a representação de uma ampla gama de caracteres de diferentes idiomas.

Compilação Just in Time (JIT)

A compilação JIT no PostgreSQL compila partes do código SQL em tempo de execução, visando melhorar a performance das consultas.

Consenso Distribuído

Consenso distribuído refere-se ao processo de alcançar um acordo coletivo em sistemas descentralizados ou distribuídos. É essencial para sistemas que requerem confiabilidade e consistência, como blockchains e sistemas de bancos de dados distribuídos.

Controle de Concorrência Multiversionado (MVCC)

MVCC é um modelo de controle de concorrência utilizado pelo PostgreSQL para permitir que múltiplas transações ocorram simultaneamente sem bloqueios, mantendo a consistência dos dados.

Delta Restore

Delta restore, no contexto de banco de dados, refere-se a uma técnica de recuperação que permite restaurar apenas as alterações ocorridas desde o último backup completo ou incremental, em vez de restaurar o banco de dados inteiro. Isso economiza tempo e recursos, pois apenas os dados alterados são aplicados ao estado anterior do banco de dados. Esse método é particularmente útil em ambientes com grandes volumes de dados, onde backups completos frequentes podem ser impraticáveis.

EPEL

EPEL (Extra Packages for Enterprise Linux) é um repositório de pacotes de software adicionais para Linux Enterprise e distribuições compatíveis, como CentOS e Red Hat Enterprise Linux.

Failover

Processo automático ou manual de troca para um sistema secundário ou de backup, quando o sistema primário falha ou fica indisponível. Esse mecanismo garante a continuidade das operações e a disponibilidade dos dados, minimizando o tempo de inatividade.

Fallback

Processo de retornar a um estado anterior ou a um sistema primário após uma tentativa de failover ou atualização que não obteve sucesso ou não é mais necessário.

gRPC

gRPC é um framework de chamada de procedimento remoto (RPC) de alto desempenho que suporta comunicação entre serviços em diferentes linguagens de programação, facilitando a construção de sistemas distribuídos.

Graceful Shutdown

Refere-se ao processo de desligar um sistema ou aplicação de maneira controlada, finalizando processos ativos e salvando dados conforme necessário para evitar perda ou corrupção de dados.

Herança de Tabelas

A herança de tabelas no PostgreSQL permite que uma tabela "herde" colunas de uma ou mais tabelas, facilitando o reuso de esquemas e a organização de dados hierárquicos.

Huge Pages

Huge pages são um recurso dos sistemas operacionais modernos que permitem a alocação de memória usando páginas de tamanho significativamente maior do que o padrão (normalmente de 4 KB a 2 MB ou mais, dependendo do sistema). Esse recurso é projetado para melhorar o desempenho de aplicações que requerem grandes volumes de memória, reduzindo a sobrecarga de gerenciamento de páginas na tabela de páginas do sistema operacional e diminuindo o TLB (Translation Lookaside Buffer) misses. Ao utilizar huge pages, aplicações intensivas em memória, como bancos de dados e servidores de aplicativos, podem alcançar uma utilização mais eficiente dos recursos do sistema, resultando em tempos de resposta mais rápidos e maior throughput.

Índice B-tree

Índices B-tree (árvore balanceada multidirecional) são a estrutura de índice padrão no PostgreSQL, otimizados para processamento rápido de consultas que envolvem ordenação e buscas por intervalo.

Índice Invertido Generalizado (GIN)

Índices GIN são utilizados no PostgreSQL para indexar elementos dentro de valores compostos, como arrays e documentos JSON, melhorando a performance de consultas que buscam por elementos específicos.

Integridade Referencial

Integridade referencial é um conceito fundamental em sistemas de gerenciamento de banco de dados relacionais que assegura a consistência e a precisão das relações entre as tabelas. Ela é mantida através de regras e restrições, como chaves primárias e chaves estrangeiras, que garantem que as referências entre as tabelas permaneçam válidas e que ações como inserção, atualização e exclusão de dados não violem a integridade dos dados. Por exemplo, uma restrição de chave estrangeira impede que um registro em uma tabela que referencia outro registro em uma tabela diferente seja excluído se o registro referenciado é essencial para a consistência dos dados entre as tabelas. Isso é crucial para evitar dados órfãos e garantir a confiabilidade das relações de dados dentro do banco.

Locale

Locale refere-se à configuração regional que afeta a formatação de texto, datas, números e outras convenções de dados, permitindo a personalização conforme as preferências locais.

Métodos de Autenticação

No PostgreSQL, o método de autenticação a ser utilizada por uma determinada regra de acesso é configurado no arquivo pg_hba.conf.

A seguir detalhamos alguns dos principais métodos de autenticação suportados pelo PostgreSQL:

  • trust: O método de autenticação 'trust' é uma das configurações mais simples e menos seguras para controle de acesso, permitindo que usuários se conectem ao banco de dados sem exigir uma senha. Geralmente é utilizado em ambientes de desenvolvimento ou em situações nas quais a rede é altamente confiável e segura. Ao utilizar 'trust', o administrador do banco de dados confia que todas as conexões feitas à base de dados são legítimas e autorizadas, sem a necessidade de validar as credenciais do usuário, o que pode representar um risco significativo de segurança se mal configurado ou usado em ambientes inseguros.

  • password: O método de autenticação 'password' do PostgreSQL é um método simples que exige que os usuários forneçam uma senha em texto plano para realizar a conexão com o banco de dados. Este método é menos seguro do que opções como 'md5' ou 'scram-sha-256', pois as senhas enviadas durante o processo de autenticação podem ser interceptadas se a conexão não estiver protegida por uma camada adicional de segurança, como SSL/TLS. A autenticação password pode ser utilizada para ambientes de teste ou desenvolvimento onde a conveniência é prioritária e os riscos de segurança são minimizados, mas não é recomendada para ambientes de produção.

  • MD5: O método de autenticação 'md5' é uma forma segura de controle de acesso que requer que os usuários forneçam uma senha, a qual é criptografada usando o algoritmo MD5 antes da transmissão pela rede. Amplamente utilizado por oferecer um bom equilíbrio entre segurança e facilidade de uso, protegendo as credenciais de acesso contra interceptações durante a autenticação. Ao empregar 'md5', o PostgreSQL garante que mesmo se o tráfego de rede for interceptado, a senha em si não será exposta, já que apenas o hash criptografado da senha é transmitido e verificado contra o valor armazenado no servidor, ajudando a prevenir ataques de tipo "man-in-the-middle".

  • SCRAM-SHA-256: O método de autenticação 'scram-sha-256' representa um avanço significativo em termos de segurança para a autenticação de usuários. Baseado no mecanismo Salted Challenge Response Authentication Mechanism (SCRAM) com hash SHA-256, este método proporciona uma forma mais segura de verificação de credenciais, pois utiliza uma combinação de salt (um valor aleatório adicionado à senha antes da aplicação do hash) e múltiplas iterações de hashing para proteger as senhas contra ataques de força bruta e dicionário. Além disso, o 'scram-sha-256' implementa um processo de autenticação desafiadora, no qual a senha nunca é enviada pela rede, nem mesmo em forma de hash, aumentando a segurança contra interceptações e ataques de "man-in-the-middle". Recomendado para ambientes que requerem altos níveis de segurança na autenticação de usuários.

  • reject: O método de autenticação 'reject' do PostgreSQL é utilizado para explicitamente negar acessos de conexão ao banco de dados, independentemente de qualquer tentativa de autenticação. Quando configurado para uma determinada regra de acesso, este método bloqueia todas as tentativas de conexão de usuários ou endereços IP especificados, sem sequer considerar credenciais ou outros métodos de autenticação. O uso de 'reject' é particularmente útil em cenários de segurança nos quais é necessário prevenir proativamente o acesso de certos usuários ou redes, servindo como uma ferramenta de controle de acesso e segurança para administradores de sistema que desejam garantir que apenas entidades autorizadas possam tentar se conectar ao sistema de banco de dados.

Objetos de Banco de Dados

Objetos de banco de dados no PostgreSQL incluem tabelas, visões, índices, funções, e mais. Eles são utilizados para armazenar, organizar e manipular dados.

PGDATA

PGDATA é o diretório onde todos os dados, incluindo arquivos de configuração e bancos de dados, de uma instância do PostgreSQL são armazenados.

PGPASS

O arquivo .pgpass permite armazenar senhas de forma segura para facilitar a autenticação automática em scripts e ferramentas que acessam o PostgreSQL.

PGPORT

PGPORT é o número da porta TCP utilizada pelo servidor PostgreSQL para escutar conexões de rede. A porta padrão é 5432.

Point-In-Time Recovery

Point-In-Time Recovery (PITR) é uma técnica avançada que permite restaurar um banco de dados para um estado exato em um determinado ponto no tempo, oferecendo uma granularidade fina de recuperação frente a perdas de dados acidentais ou danos. Isso é alcançado através da combinação de backups completos do banco de dados com logs de transações (também conhecidos como WAL no PostgreSQL), que registram todas as mudanças feitas no banco de dados após o último backup completo. PITR é especialmente valioso em ambientes de produção, pois permite que administradores de banco de dados revertam apenas os efeitos de operações específicas indesejadas ou maliciosas, minimizando a perda de dados válidos e o tempo de inatividade do sistema, ao mesmo tempo em que maximiza a disponibilidade e a integridade dos dados.

Proxy Reverso

Proxy reverso é um tipo de servidor proxy que encaminha requisições de clientes para outros servidores, comumente utilizado para balanceamento de carga, segurança e caching.

Replicação Assíncrona de Dados

A replicação assíncrona no PostgreSQL permite a cópia de dados para servidores de réplica sem bloquear as operações no servidor primário, suportando alta disponibilidade e distribuição geográfica dos dados.

RPM

RPM é um sistema de gerenciamento de pacotes usado em distribuições Linux baseadas em Red Hat, facilitando a instalação, atualização e remoção de software.

Schema

Em bancos de dados, um esquema (schema) é uma estrutura lógica que define a organização, o relacionamento e as restrições dos dados, agindo como um contêiner para agrupar objetos de banco de dados, como tabelas, visões, índices e funções. Esquemas ajudam na organização e na segurança dos dados, permitindo que diferentes usuários ou aplicações operem dentro de espaços lógicos separados dentro do mesmo banco de dados, sem interferência entre si. Além disso, oferecem uma maneira de implementar a separação de conceitos, facilitando a administração de permissões, a manutenção do banco de dados e a escalabilidade das aplicações, ao permitir a organização lógica dos dados de forma clara e estruturada.

SIGHUP

SIGHUP é um sinal enviado a processos do sistema operacional para indicar fechamento de terminal ou recarregamento de configurações. No PostgreSQL, é frequentemente utilizado para recarregar arquivos de configuração sem reiniciar o servidor.

Subconsultas

Subconsultas são consultas SQL dentro de outras consultas, permitindo a composição de consultas complexas e a reutilização de resultados intermediários.

Switchover

Switchover é o processo controlado de troca de papéis entre um servidor primário e um de standby no PostgreSQL, permitindo manutenção ou atualizações com mínima interrupção.

Teste de Regressão

Teste de regressão é uma técnica de teste de software que visa verificar se mudanças recentes no código, como novas funcionalidades, correções de bugs ou atualizações, não afetaram negativamente o funcionamento de funcionalidades existentes. Essa abordagem é essencial para garantir a estabilidade e a qualidade do software ao longo do desenvolvimento e das manutenções, minimizando o risco de introduzir novos erros em partes do sistema que anteriormente funcionavam corretamente. Os testes de regressão podem ser realizados manualmente ou de forma automatizada, sendo a automação altamente recomendada para projetos de grande escala ou para softwares que recebem atualizações frequentes, facilitando a execução rápida e eficiente de um conjunto abrangente de testes sempre que alterações são feitas.

Tipo de Conexão

No PostgreSQL, o tipo da conexão a ser utilizada por uma determinada regra de acesso é configurado no arquivo pg_hba.conf.

Os tipos de conexão suportados são:

  • local: Socket de domínio Unix;

  • host: Conexão TCP/IP, com ou sem criptografia SSL, dependendo da configuração do método de autenticação;

  • hostssl: Conexão TCP/IP com criptografia SSL;

  • hostnossl: Conexão TCP/IP sem criptografia SSL;

  • hostgssenc: Conexão TCP/IP com criptografia GSSAPI. Essa tipo de conexão é destinado a ambientes que requerem autenticação e criptografia avançadas, como Kerberos;

  • hostnogssenc: Conexão TCP/IP sem criptografia GSSAPI.

Savepoint

Savepoint permite a criação de um ponto de restauração dentro de uma transação no PostgreSQL, oferecendo maior controle sobre operações de banco de dados e permitindo desfazer uma parte da transação sem abortá-la por completo.

Translation Lookaside Buffer (TLB)

Área de cache especializada usada para melhorar a eficiência da tradução de endereços virtuais para físicos, reduzindo o tempo de acesso à memória.

Trigger

Triggers são procedimentos armazenados que são automaticamente executados em resposta a eventos específicos em tabelas ou visualizações (views), como inserções, atualizações ou exclusões.

Unidade de Gerenciamento de Memória (MMU)

MMU é um componente de hardware que gerencia o mapeamento de endereços virtuais para físicos, essencial para o funcionamento da memória virtual em sistemas computacionais.

Usuário

No PostgreSQL, um usuário é uma conta que pode se conectar e interagir com a instância de banco de dados. Incluem usuários comuns e superusuários, com diferentes níveis de privilégios.

Visão Atualizável

Uma visão atualizável no PostgreSQL é uma visão (view) sobre a qual é possível realizar operações de inserção, atualização e exclusão de dados, como se fosse uma tabela comum. Isso é viável quando a visão é definida com base em uma única tabela e não envolve agregações complexas, junções ou subconsultas que impediriam a modificação direta dos dados.

Visão Materializável

Uma visão materializável no PostgreSQL é uma visão cujos resultados são armazenados fisicamente e podem ser atualizados sob demanda, oferecendo melhor desempenho para consultas complexas. Essa abordagem combina os benefícios de armazenamento de dados pré-calculados com a flexibilidade de atualizações controladas.

WALDIR

WALDIR é o diretório no PGDATA onde os arquivos de log transacionais (WAL) são armazenados, essenciais para a recuperação de dados e replicação no PostgreSQL.

Write-Ahead Logging (WAL)

O Write-Ahead Logging (WAL) no PostgreSQL é um mecanismo que assegura a durabilidade de transações e a consistência dos dados, escrevendo todas as modificações de transações em um log de pré-gravação antes de serem efetivamente aplicadas aos arquivos de dados do banco de dados. Este procedimento permite que o sistema recupere seu estado consistente após uma falha, utilizando os logs para reexecutar transações confirmadas que ainda não foram escritas nos arquivos de dados ou para desfazer transações não confirmadas. O WAL também desempenha um papel crucial na implementação de replicação síncrona e assíncrona, facilitando a cópia de transações do servidor primário para servidores secundários sem a necessidade de bloquear operações de leitura e escrita durante a sincronização.