Versão do SGBD PostgreSQL 18

Após um ano de desenvolvimento, um novo branch estável do PostgreSQL 18 DBMS foi publicado. As atualizações para o novo branch serão lançadas ao longo de cinco anos até novembro de 2030. O PostgreSQL 13.x, o branch mais antigo com suporte, terminará em 13 de novembro.

Principais inovações:

  • Um subsistema de E/S assíncrona foi adicionado para aumentar a taxa de transferência de E/S e eliminar a latência. Além da implementação universal de AIO (io_method=worker) disponível em todas as plataformas, que se baseia na execução de múltiplos processos de trabalho (3 por padrão), Linux A interface de E/S assíncrona io_uring (io_method=io_uring), suportada desde o kernel, pode ser usada. Linux 5.1. A E/S assíncrona é atualmente usada apenas para acelerar certas operações relacionadas à leitura de dados do sistema de arquivos, como iteração sequencial, varredura de bitmap de índice e limpeza (vacuum). Em alguns testes, o uso de E/S assíncrona resulta em um aumento de desempenho de 2 a 3 vezes. As operações de gravação continuam sendo realizadas de forma síncrona para atender aos requisitos ACID.
  • Uma otimização "skip scan" foi implementada para índices multicoluna. Isso permite que o índice seja usado não apenas para verificar a primeira coluna indexada e toda a cadeia de colunas, mas também para processar as colunas indexadas restantes individualmente. Por exemplo, anteriormente, ao criar um índice de árvore B nas colunas "(status, date)", o índice era usado apenas para consultas que verificavam o campo "status" ou ambos os campos "status" e "date". Uma varredura de tabela era realizada ao verificar apenas o campo "date" em uma consulta. O modo "skip scan" permite, em determinadas situações, uma varredura de índice ao consultar apenas o campo "date". Este modo é aplicável apenas a índices de árvore B ao usar o operador condicional "=" em um campo indexado em uma consulta, em situações em que o campo ignorado tem um pequeno número de valores distintos (por exemplo, a otimização funcionará se o campo "status" tiver vários valores fixos).
  • Otimizações adicionadas que tornam o uso de índices mais eficiente para consultas contendo construções "OR" e "IN (...)" na cláusula "WHERE" e melhoram o desempenho do planejamento e execução de junções de tabelas (por exemplo, o código de mesclagem de hash foi acelerado e a classificação incremental agora é permitida ao mesclar tabelas).
  • Adicionado suporte para paralelizar a construção de índices GIN (Generalized Inverted Index), que são usados ​​para indexar valores compostos, como matrizes, e para organizar pesquisas em dados de texto completo ou estruturas JSON.
  • Foi adicionada a capacidade de criar visualizações materializadas e chaves para particionar tabelas com índices exclusivos que não usam a estrutura de árvore B.
  • O desempenho geral do bloqueio foi melhorado para consultas que funcionam com um grande número de tabelas, e melhorias foram feitas no processamento de consultas em tabelas particionadas para acelerar a poda de partições não utilizadas e operações de mesclagem (JOIN).
  • Operações de texto, como funções de conversão de maiúsculas/minúsculas, foram aceleradas. O modo PG_UNICODE_FAST foi adicionado para acelerar o processamento de propriedades de localidade de caracteres Unicode.
  • Implementamos a capacidade de preservar as estatísticas do planejador de consultas após a atualização entre as principais versões do PostgreSQL. Essa alteração evita a operação "ANALYZE", que consome muitos recursos, após o lançamento de uma nova versão, o que pode causar queda de desempenho até a conclusão.
  • O desempenho do utilitário pg_upgrade, usado para automatizar atualizações para uma nova versão principal do PostgreSQL, foi aprimorado. Essas otimizações são particularmente perceptíveis ao atualizar bancos de dados que contêm um grande número de objetos, como tabelas e sequências. Para acelerar o pg_upgrade, também adicionamos o sinalizador "--jobs N" para paralelizar verificações em N threads e o sinalizador "--swap" para substituir diretórios de dados inteiros sem vincular, clonar ou copiar arquivos.
  • Foi adicionado suporte para colunas geradas virtualmente, cujos valores são calculados dinamicamente durante a execução da consulta, sem salvá-los em disco. Se a instrução "CREATE TABLE..." especificar apenas a palavra-chave "GENERATED" para colunas geradas sem especificar um tipo (STORED ou VIRTUAL), a nova implementação será usada por padrão em vez da implementação antiga. Na implementação antiga, os valores eram gerados durante as operações "INSERT" ou "UPDATE" e salvos em disco para uso posterior. A desvantagem das colunas geradas virtualmente é que elas não podem ser usadas em índices, mas sua vantagem é a capacidade de normalizar e modificar dados dinamicamente (relevante ao trabalhar com dados JSON). Em relação às colunas geradas armazenadas clássicas, a nova versão oferece suporte para replicação lógica.
  • Os comandos INSERT, UPDATE, DELETE e MERGE agora suportam a capacidade de exibir valores passados ​​(OLD) e atuais (CURRENT) na cláusula RETURNING. Por exemplo, "UPDATE… RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*."
  • A função uuidv7() foi adicionada para gerar identificadores únicos aleatórios no formato UUIDv7. Ao contrário da antiga função de geração de UUID (gen_random_uuid), que agora também está disponível como uuidv4(), a função UUIDv7 inclui o tempo de geração, além do valor aleatório. A ordenação das partes no valor do UUID (os primeiros 12 caracteres são o tempo de época e os próximos 18 são um valor aleatório) melhora a eficiência da classificação e da indexação, o que é importante, visto que os UUIDs são normalmente usados ​​para chaves primárias (por exemplo, chaves criadas em momentos semelhantes são colocadas lado a lado no índice).
  • A operação "LIKE" agora oferece suporte a comparações de texto que utilizam propriedades de ordenação de localidade não determinísticas, permitindo comparações significativas de caracteres (por exemplo, acentos podem ser ignorados durante a comparação). A função CASEFOLD foi adicionada para alterar a capitalização de caracteres com base nas propriedades de ordenação de localidade (por exemplo, alguns caracteres têm mais de duas variantes em minúsculas ou exigem conversão para maiúsculas durante a comparação).
  • Foi adicionada a capacidade de usar restrições temporais. Para valores PRIMARY KEY e UNIQUE, use a expressão WITHOUT OVERLAPS para adicionar restrições temporais, e para valores FOREIGN KEY, use a expressão PERIOD. Por exemplo, ao definir chaves primárias, você pode restringir chaves com intervalos de tempo sobrepostos.
  • Adicionado o comando "CREATE FOREIGN TABLE … LIKE" para criar um esquema de tabela estrangeira com base em uma definição de tabela local.
  • Foi adicionado suporte para conexão a um SGBD usando autenticação OAUTH 2.0 com um token de acesso em vez de uma senha. O uso do OAUTH elimina a necessidade de armazenar senhas no banco de dados, permitindo a autenticação do usuário por meio de serviços externos e o uso de recursos como autenticação de dois fatores e logon único (SSO).
  • A função ssl_tls13_ciphers() foi adicionada, a qual pode ser usada para definir uma lista de algoritmos de criptografia permitidos ao conectar usando o protocolo TLSv1.3.
  • O suporte para autenticação usando o algoritmo de hash de senha md5 foi descontinuado e está programado para ser removido. Em vez do md5, recomenda-se usar o algoritmo SCRAM (SCRAM-SHA-256), introduzido no PostgreSQL 10. Além disso, foi implementado suporte para autenticação passthrough baseada em SCRAM ao conectar-se via postgres_fdw e dblink a servidores PostgreSQL externos.
  • A operação "EXPLAIN ANALYZE" agora exibe informações sobre o número de buscas de índice durante varreduras de índice e o número de acessos ao buffer durante a execução da consulta. A saída "EXPLAIN ANALYZE VERBOSE" agora inclui estatísticas sobre a CPU, o log do WAL e a atividade de leitura. A tabela pg_stat_all_tables agora exibe informações sobre o tempo gasto na operação VACUUM e na análise da tabela. Estatísticas sobre a atividade de E/S e a carga do log do WAL agora estão disponíveis para conexões individuais. pg_stat_subscription_stats e os logs agora contêm informações sobre diagnósticos de conflito para operações de gravação durante a replicação lógica.
  • Novas instalações habilitam somas de verificação por padrão para verificar a integridade dos dados armazenados. Para desabilitar esse comportamento, especifique a opção "--no-data-checksums" ao executar o initdb.
  • O sinalizador "--all" foi adicionado ao utilitário pg_createsubscriber para permitir a criação de réplicas lógicas para todos os bancos de dados de uma só vez com um único comando.
  • Uma nova versão (3.2) do protocolo usado para interação entre utilitários externos e o SGBD, implementado na biblioteca libpq, foi implementada. O protocolo foi atualizado pela última vez no PostgreSQL 7.4 (2003). A biblioteca libpq continua a usar a versão 3.0 por padrão.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster