Após um ano de desenvolvimento, foi publicada uma nova versão estável do SGBD PostgreSQL 14. Atualizações para esta nova versão serão lançadas ao longo de cinco anos, até novembro de 2026.
Principais novidades:
- Foi adicionado suporte ao acesso a dados JSON por meio de expressões, semelhante ao trabalho com arrays: SELECT (‘{ "postgres": { "release": 14 }}’::jsonb)[‘postgres’][‘release’]; SELECT * FROM test WHERE details[‘attributes’][‘size’] = ‘"medium"‘;
Uma sintaxe semelhante foi implementada para dados no formato chave/valor, fornecidos pelo tipo hstore. Essa sintaxe foi inicialmente implementada usando um framework universal, que poderá ser utilizado no futuro para outros tipos. Exemplo para o tipo hstore: INSERT INTO mytable VALUES (‘a=>b, c=>d’); SELECT h[‘a’] FROM mytable; UPDATE mytable SET h[‘c’] = ‘new’;
- A família de tipos para definição de intervalos foi expandida com novos tipos "multirange", permitindo a definição de listas ordenadas de intervalos de valores não sobrepostos. Além de cada tipo range existente, foi proposto seu respectivo tipo multirange, por exemplo, o tipo "int4range" corresponde a "int4multirange", enquanto "daterange" corresponde a "datemultirange". O uso dos novos tipos simplifica a formatação de consultas que manipulam sequências complexas de intervalos. SELECT ‘{[3,7), [8,9)}’::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
- Otimizações foram realizadas para aumentar o desempenho de sistemas de alta carga que processam um grande número de conexões. Em alguns testes, foi observada uma duplicação do desempenho.
- A eficiência do funcionamento dos índices B-tree foi aumentada e o problema de crescimento dos índices durante atualizações frequentes de tabelas foi resolvido.
- Foi adicionado suporte para um modo de transmissão de solicitações em pipeline (implementado no nível libpq) que opera do lado do cliente, permitindo acelerar significativamente os cenários de trabalho com o banco de dados, relacionados à execução de um grande número de pequenas operações de gravação (INSERT/UPDATE/DELETE) ao enviar a próxima solicitação sem esperar o resultado da anterior. Esse modo também ajuda a acelerar o trabalho em conexões com grandes latências de entrega de pacotes.
- As capacidades para configurações distribuídas que incluem múltiplos servidores PostgreSQL. Na implementação da replicação lógica, foi adicionada a capacidade de enviar, em tempo real, transações em andamento, o que permite aumentar significativamente o desempenho da replicação de grandes transações. Além disso, a decodificação lógica dos dados recebidos no processo de replicação lógica foi otimizada.
- Na mecânica de conexão de tabelas externas Foreign Data Wrapper (postgres_fdw), foi adicionado o suporte para processamento paralelo de consultas, que até agora é aplicável apenas ao conectar-se a outros servidores PostgreSQL. No postgres_fdw também foi adicionado suporte para inserção de dados em tabelas externas em modo em lote e a possibilidade de importar tabelas particionadas por meio da diretiva "IMPORT FOREIGN SCHEMA".
- Otimizações foram implementadas na operação VACUUM (coleta de lixo e compactação do armazenamento em disco). Foi adicionado um modo de limpeza de emergência, que ignora operações de limpeza irrelevantes caso haja condições para uma rodagem de IDs de transação (transaction ID wraparound). Reduziu-se a sobrecarga no processamento de índices no formato B-Tree. O desempenho da operação "ANALYZE", que coleta estatísticas sobre o funcionamento do BD, foi significativamente acelerado.
- Adicionada a possibilidade de configurar o método de compressão utilizado no sistema TOAST, responsável pelo armazenamento de grandes dados, como blocos de texto ou informações geométricas. Além do método de compressão pglz, agora é possível utilizar o algoritmo LZ4 no TOAST.
- Foram expandidos os recursos de monitoramento do funcionamento do SGBD. Foram adicionadas visões para rastrear o progresso da execução de comandos "COPY" (pg_stat_progress_copy), estatísticas sobre slots de replicação (pg_stat_replication_slots) e atividades relacionadas ao log WAL das transações (pg_stat_wal). Foi adicionada a função compute_query_id, que, em diversos subsistemas como pg_stat_activity e EXPLAIN VERBOSE, permite rastrear consultas atribuindo um identificador exclusivo para cada consulta.
- O planejador de consultas foi otimizado para melhorar o processamento paralelo de consultas e permitir um aumento no desempenho da execução simultânea de operações de varredura sequencial, execução paralela de consultas em PL/pgSQL usando o comando "RETURN QUERY" e execução paralela de consultas em "REFRESH MATERIALIZED VIEW". Para aumentar o desempenho de junções aninhadas cíclicas, foi implementado o suporte a caching adicional.
- Para a otimização de expressões, agora é possível usar estatísticas avançadas, e para a otimização de funções de janela — ordenação incremental.
- Em procedimentos armazenados que permitem gerenciar transações em blocos de código, foi implementado o suporte para definir dados retornados usando parâmetros "OUT".
- Foi adicionada a função date_bin para arredondar valores do tipo timestamp de acordo com o intervalo especificado. SELECT date_bin(’15 minutes’, TIMESTAMP ‘2020-02-11 15:44:17’, TIMESTAMP ‘2001-01-01’); 2020-02-11 15:30:00
- Foram adicionadas expressões SEARCH e CYCLE definidas pelo padrão SQL, que simplificam a ordenação e identificação de ciclos em expressões de tabela comuns recursivas (Common Table Expression, CTE). WITH RECURSIVE search_tree(id, link, data) AS ( SELECT t.id, t.link, t.data FROM tree t UNION ALL SELECT t.id, t.link, t.data FROM tree t, search_tree st WHERE t.id = st.link ) SEARCH DEPTH FIRST BY id SET ordercol SELECT * FROM search_tree ORDER BY ordercol;
- Na utilidade psql, o autocompletar de comandos com tabulação foi aprimorado, no comando "\df" foi adicionada a opção de mostrar os argumentos das funções, e no comando "\dX" a estatística exibida foi expandida.
- Foi disponibilizada a possibilidade de atribuir a usuários privilégios que permitem apenas leitura ou apenas gravação. Os privilégios podem ser definidos em relação a tabelas, visualizações e esquemas específicos usando os papéis predefinidos pg_read_all_data e pg_write_all_data. GRANT pg_read_all_data TO user1;
- Em novas instalações, a autenticação por senha com o método SCRAM-SHA-256 agora é a configuração padrão em vez de md5 (o parâmetro "password_encryption" ao gerar postgresql.conf agora é definido como 'scram-sha-256').
Fonte: opennet.ru
