Lançamento do SGBD PostgreSQL 18

Após um ano de desenvolvimento, uma nova versão estável do SGBD PostgreSQL 18 foi publicada. As atualizações para a nova versão serão lançadas durante cinco anos até novembro de 2030. O suporte para o PostgreSQL 13.x, a versão mais antiga suportada, será encerrado em 13 de novembro.

Principais novidades:

  • Foi adicionada uma subsistema de entrada/saída assíncrona, permitindo aumentar a capacidade de entrada/saída e eliminar atrasos. Além da implementação universal de AIO disponível em todas as plataformas (io_method=worker), baseada na execução de vários processos manipuladores (por padrão, 3), no Linux pode ser utilizado a interface de entrada/saída assíncrona io_uring (io_method=io_uring), suportada a partir do núcleo Linux 5.1. O AIO está atualmente ativo apenas para acelerar a execução de algumas operações relacionadas à leitura de dados do sistema de arquivos, como varredura sequencial, varredura de bitmap de índices e realização de limpeza (vacuum). Em alguns testes, o uso do AIO resulta em um aumento de desempenho de 2 a 3 vezes. As operações de gravação continuam a ser executadas de forma síncrona para atender aos requisitos ACID.
  • Foi implementada a otimização "skip scan" em índices de múltiplas colunas, permitindo que o índice seja utilizado não apenas para verificar a primeira coluna indexada e o conjunto completo de colunas, mas também para processar separadamente as demais colunas indexadas. Por exemplo, anteriormente, ao criar um índice B-tree nas colunas "(status, date)", o índice era aplicado apenas para consultas que verificavam o campo "status" ou ambos os campos "status" e "date", enquanto a verificação apenas do campo "date" resultava em uma varredura do conteúdo da tabela. O modo "skip scan" permite, em certas situações, escanear o índice ao consultar apenas o campo "date". O modo é aplicado apenas para índices "B-tree" ao usar um operador condicional "=" sobre o campo indexado, em situações em que o campo ignorado tem um número limitado de valores distintos (por exemplo, a otimização funcionará se o campo status "status" tiver vários valores fixos).
  • Adicionadas otimizações que utilizam mais eficientemente os índices para consultas contendo as cláusulas "OR" e "IN (...)" no bloco "WHERE", além de melhorar o desempenho do planejamento e execução de junções de tabelas (por exemplo, o código de junção de hashes foi acelerado e a ordenação incremental foi permitida durante a junção de tabelas).
  • Adicionada a suporte para paralelização da construção de índices GIN (Índice Invertido Generalizado), aplicados à indexação de valores compostos, como arrays, e à organização da pesquisa em dados de texto completo ou estruturas JSON.
  • Adicionada a possibilidade de criação de visões materializadas e chaves para particionamento de tabelas com índices com a característica "unique", que não utilizam a estrutura B-tree.
  • Aumentada a performance geral de bloqueios para consultas que trabalham com um grande número de tabelas, além de melhorias na manipulação de consultas em tabelas particionadas que aceleram o descarte de seções não utilizadas e operações de junção (JOIN).
  • Aceleradas operações com texto, como funções de conversão para maiúsculas/minúsculas. Adicionado o modo PG_UNICODE_FAST para acelerar a consideração das propriedades de localidade dos caracteres Unicode.
  • Implementada a possibilidade de salvar a estatística do planejador de consultas após a atualização entre versões significativas do PostgreSQL. Essa mudança evita a execução da operação intensiva em recursos "ANALYZE" após a ativação de uma nova versão, até que a qual se observa uma queda de performance do SGBD.
  • Aumentada a performance da ferramenta pg_upgrade, utilizada para automatizar a transição para uma nova versão significativa do PostgreSQL. As otimizações são particularmente notáveis ao atualizar bancos de dados que contêm um grande número de objetos, como tabelas e sequências. Para acelerar o funcionamento do pg_upgrade, também foi adicionado o flag "—jobs N" para paralelizar verificações em N threads e o flag "—swap" para substituir diretórios de dados completamente sem a necessidade de links, clonagem ou cópia de arquivos.
  • Foi adicionado suporte a colunas geradas virtualmente, cujos valores são calculados em tempo de execução durante a execução das consultas, sem armazenamento em disco. Se na expressão "CREATE TABLE..." para colunas geradas for especificada apenas a palavra-chave "GENERATED" sem a especificação do tipo (STORED ou VIRTUAL), a nova variante será aplicada por padrão em vez da implementação anterior. Na implementação anterior, os valores eram gerados durante as operações de "INSERT" ou "UPDATE" e armazenados em disco para uso posterior. A desvantagem das colunas geradas virtualmente é a impossibilidade de uso em índices, e a vantagem é a capacidade de realizar normalização e alteração de dados em tempo real (relevante ao trabalhar com dados JSON). Quanto às colunas geradas armazenadas clássicas, a nova versão oferece suporte à replicação lógica.
  • Nos comandos INSERT, UPDATE, DELETE e MERGE, foi implementada a possibilidade de exibir valores antigos (OLD) e atuais (CURRENT) na expressão RETURNING. Por exemplo, "UPDATE... RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.".
  • Foi adicionada a função uuidv7() para gerar identificadores únicos aleatórios no formato UUIDv7. Diferentemente da antiga função de geração de UUID (gen_random_uuid), que agora está disponível também sob o nome uuidv4(), o UUIDv7 inclui, além do valor aleatório, o tempo de geração. A existência de partes ordenadas no valor UUID (os primeiros 12 caracteres representam o tempo epoch, e os 18 subsequentes um valor aleatório) aumenta a eficiência de ordenação e indexação, o que é relevante uma vez que UUIDs são geralmente usados como chaves primárias (por exemplo, chaves criadas em tempos próximos ficam próximas umas das outras no índice).
  • Na operação "LIKE", foi implementado suporte a correspondências com texto, nas quais são utilizadas propriedades indeterminadas de localidade "collation", permitindo realizar correspondências levando em conta o significado dos caracteres (por exemplo, ao comparar, pode-se ignorar o acento). Foi adicionada a função CASEFOLD para alterar a casse dos caracteres considerando as propriedades de localidade "collation" (por exemplo, alguns caracteres têm mais de duas variantes minúsculas ou, ao comparar, requerem conversão para maiúsculas em vez de minúsculas).
  • Adicionada a possibilidade de usar restrições temporais (temporal constraint). Para os valores "PRIMARY KEY" e "UNIQUE", deve-se usar a expressão "WITHOUT OVERLAPS" ao adicionar restrições temporais, enquanto para o valor "FOREIGN KEY" — a expressão PERIOD. Por exemplo, ao definir chaves primárias, é possível restringir chaves com períodos de tempo sobrepostos.
  • Adicionada a comando "CREATE FOREIGN TABLE … LIKE command" para criar um esquema de tabela externa com base na definição de uma tabela local.
  • Adicionada a suporte para conexão a SGBD usando autenticação baseada em OAUTH 2.0 com um token de acesso em vez de senha. O uso de OAUTH permite não armazenar senhas no BD, identificar usuários através de serviços externos e usar recursos como autenticação de dois fatores e ponto de entrada único (SSO).
  • Adicionada a função ssl_tls13_ciphers(), pela qual é possível determinar a lista de algoritmos de criptografia permitidos ao conectar usando o protocolo TLSv1.3.
  • Apoio à autenticação usando o algoritmo md5 para hashing de senhas foi transferido para a categoria de obsoleto e programado para remoção. Em vez de md5, recomenda-se o uso do algoritmo SCRAM (SCRAM-SHA-256), que surgiu no PostgreSQL 10. Também é observada a implementação do suporte para a passagem de autenticação baseada em SCRAM ao conectar via postgres_fdw e dblink a servidores PostgreSQL externos.
  • Ao executar a operação "EXPLAIN ANALYZE", foram fornecidas informações sobre o número de operações de busca em índices durante a varredura do índice e o número de acessos a buffers durante a execução da consulta. A saída "EXPLAIN ANALYZE VERBOSE" incluiu estatísticas sobre CPU, WAL-log e intensidade das operações de leitura. Na tabela pg_stat_all_tables, foram adicionadas informações sobre o tempo gasto nas operações VACUUM e análise de tabelas. Estatísticas sobre a intensidade de entrada/saída e carga no WAL-log foram fornecidas por conexão. Informações de diagnóstico de conflitos ao realizar operações de gravação durante a replicação lógica foram adicionadas ao pg_stat_subscription_stats e aos logs.
  • Em novas instalações, o uso de somas de verificação para verificar a integridade dos dados armazenados está habilitado por padrão. Para reverter esse comportamento ao iniciar o initdb, deve-se especificar a opção "—no-data-checksums".
  • Foi adicionado à ferramenta pg_createsubscriber a flag «—all» para criar replicas lógicas com um único comando para todos os bancos de dados.
  • Uma nova versão (3.2) do protocolo utilizado para interação com utilitários externos e implementado na biblioteca libpq foi realizada. A última atualização do protocolo ocorreu no PostgreSQL 7.4 (ano de 2003). Na biblioteca libpq, a versão 3.0 continua sendo utilizada por padrão.

Fonte: opennet.ru

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