PostgreSQL 16.
Lançado como uma versão de manutenção dentro da série PostgreSQL 16, o 16.3 inclui várias melhorias incrementais e correções
de bugs além das funcionalidades introduzidas nas versões principais de PostgreSQL 13, 14, 15 e 16.
Principais Melhorias e Recursos (desde o PostgreSQL 12):
1. Performance:
o Aumento significativo na performance de consultas paralelas e operações OLAP.
o Melhor gerenciamento de memória e cache.
o Otimizações para operações de leitura e escrita em sistemas de arquivos.
2. Particionamento:
o Novos métodos de particionamento e suporte para particionamento automático.
o Capacidade de mover partições de uma tabela para outra sem downtime.
3. Conformidade SQL e Recursos de Linguagem:
o Suporte aprimorado para JSON e operações JSONB.
o Novas funções e operadores para manipulação de tipos de dados complexos.
o Melhorias no suporte a funções de janela e agregações avançadas.
4. Backup e Recuperação:
o Melhorias na recuperação point-in-time (PITR).
o Melhorias na consistência e eficiência de backups incrementais.
5. Segurança e Autenticação:
o Suporte para métodos modernos de autenticação como OAuth.
o Melhorias na criptografia de dados e gerenciamento de chaves.
6. Extensibilidade:
o Novos hooks e APIs para a criação de extensões mais robustas.
o Melhorias no gerenciamento e instalação de extensões.
7. Correções de Bugs e Estabilidade:
o Centenas de correções de bugs e melhorias de estabilidade.
Característica PostgreSQL 12 PostgreSQL 16
Melhorias em consultas paralelas, gerenciamento de memória e
Performance Melhorias no VACUUM e B-tree
cache, otimizações em leitura/escrita
Novos métodos de particionamento, movimentação de partições
Particionamento Índices únicos, melhor planejamento
sem downtime
Colunas geradas, melhor suporte Suporte ampliado para JSON, novas funções e operadores, melhorias
Conformidade SQL
para CTEs em funções de janela
Backup e Backup incremental, melhorias no Melhorias no tempo de recuperação, novas opções PITR, consistência
Recuperação pg_basebackup de backups incrementais
Autenticação moderna (OAuth), melhorias na criptografia e
Segurança Controle de acesso por colunas
gerenciamento de chaves
Novos hooks e APIs para extensões, melhor gerenciamento de
Extensibilidade -
extensões
Centenas de correções e melhorias na estabilidade desde a versão 12
Correções de Bugs Correções na versão 12.x até 16.3
PostgreSQL 16 contém muitos novos recursos e aprimoramentos, incluindo:
• Permitir paralelização de FULL e direito interno OUTER hash junta-se
• Permitir replicação lógica de servidores em espera
• Permitir que os assinantes de replicação lógica apliquem grandes transações em paralelo
• Permitir o monitoramento de I/O estatísticas usando o novo pg_stat_io ver
• Adicionar SQL/JSON construtores e funções de identidade
• Melhorar o desempenho do congelamento a vácuo
• Adicionar suporte para correspondência de expressão regular de nomes de usuários e bancos de dados
em pg_hba.conf, e nomes de usuário em pg_ident.conf
Os itens acima e outros novos recursos de PostgreSQL 16 são explicados em mais detalhes nas seções abaixo.
Migração para a versão 16
Restauração usando pg_dumpall ou uso de pg_upgrade é necessária uma replicação lógica para aqueles que desejam
migrar dados de qualquer versão anterior.
A versão 16 contém várias alterações que podem afetar a compatibilidade com versões anteriores.
Observe as seguintes incompatibilidades:
*Alterar regras de atribuição para PL/pgSQL variáveis do cursor ligado.
Anteriormente, o valor da string de tais variáveis era definido para corresponder ao nome da variável durante a
atribuição do cursor; agora será atribuído durante OPEN, e não corresponderá ao nome da variável. Para restaurar o
comportamento anterior, atribua o nome do portal desejado à variável cursor antes OPEN.
*Não permitir NULLS NOT DISTINCT índices para chaves primárias.
*Mudar REINDEX DATABASE e reindexdb para não processar índices em catálogos de sistemas.
O processamento desses índices ainda é possível usando REINDEX SYSTEM e reindexdb --system.
*Apertar GENERATED restrições de expressão em tabelas herdadas e particionadas.
As colunas das tabelas pai/particionado e filho/partição devem ter o mesmo status de geração, embora agora as
expressões reais de geração possam ser diferentes.
*Remover pg_walinspect funções pg_get_wal_records_info_till_end_of_wal() e pg_get_wal_stats_till_end_of_wal().
*Renomear variável do servidor force_parallel_mode para debug_parallel_query.
*Remova a capacidade de create viewes manualmente com ON SELECT regras.
*Remover a variável do servidor vacuum_defer_cleanup_age.
Isso tem sido desnecessário desde então hot_standby_feedback e replication slots foram adicionados.
*Remover variável do servidor promote_trigger_file.
Isso foi usado para promover um standby para primário, mas agora é mais facilmente realizado com pg_ctl
promote ou pg_promote().
*Remover variáveis de servidor somente leitura lc_collate e lc_ctype.
Colações e localidades podem variar entre bancos de dados, portanto, tê-los como variáveis de servidor somente leitura
não foi útil.
*A herança de função agora controla o status de herança padrão das funções de membro adicionadas durante GRANT
O comportamento de herança padrão da função pode ser substituído com o novo GRANT ... WITH INHERIT cláusula.
Isso permite a herança de alguns papéis e não de outros porque o status de herança dos membros é definido
como GRANT tempo. Anteriormente, o status de herança das funções de membro era controlado apenas pelo status de
herança da função e as alterações no status de herança de uma função afetavam todas as funções de membro anteriores
e futuras.
*Restringir os privilégios de CREATEROLE e sua capacidade de modificar outras funções
Anteriormente papéis com CREATEROLE os privilégios podem alterar muitos aspectos de qualquer função que não seja
de super usuário. Tais alterações, incluindo a adição de membros, agora exigem que a função solicitando a alteração
tenha ADMIN OPTION permissão. Por exemplo, agora eles podem mudar o CREATEDB, REPLICATION,
e BYPASSRLS propriedades somente se elas também tiverem essas permissões.
*Remover links simbólicos para o postmaster binário
Incompatibilidade entre versões -> [Link]
PostgreSQL 12 para 13 PostgreSQL 13 para 14 PostgreSQL 14 para 15 PostgreSQL 15 para 16
- Funções e parâmetros depreciados
- Mudanças na forma como funções de - Remoção de funcionalidades - Alterações e melhorias na sintaxe SQL que
em versões anteriores podem ter sido
janela e agregações são processadas. obsoletas. podem afetar consultas existentes.
removidos.
SQL e Funções - Novas palavras reservadas podem - Ajustes no comportamento de - Novas palavras reservadas e mudanças no
- Alterações na sintaxe e
causar conflitos com identificadores funções de agregação e manipulação comportamento de funções JSON e
comportamento de funções
existentes. de dados JSON. agregações.
relacionadas a JSON.
- Alguns parâmetros de configuração - Alterações adicionais em parâmetros - Mudanças em parâmetros de - Parâmetros de configuração novos e
podem ter sido renomeados, de configuração. configuração relacionados à removidos.
Configurações do
removidos ou ajustados. - Mudanças no comportamento performance e segurança. - Ajustes nos valores padrão de certos
Servidor
- Alterações nos valores padrão de padrão de alguns recursos de - Alterações nos padrões de alguns parâmetros podem afetar a performance e
certos parâmetros. segurança e autenticação. parâmetros críticos. comportamento do servidor.
- Mudanças no comportamento dos - Mudanças nos algoritmos de
Indexação e
índices B-tree podem exigir indexação podem exigir reindexação
Armazenamento
reindexação. para melhor performance.
- Extensões podem precisar ser - Extensões podem necessitar de - Necessidade de atualizar extensões - Extensões precisarão ser revisadas e
Extensões atualizadas para garantir ajustes para serem compatíveis com as para compatibilidade com a nova API e atualizadas para garantir compatibilidade
compatibilidade. mudanças internas. funcionalidades. com a nova versão.
- Melhorias no gerenciamento de - Melhorias no particionamento que podem
Particionamento partições podem afetar scripts e exigir ajustes em scripts de manutenção e
operações existentes operações de dados.
- Introdução de novos métodos de
autenticação e alterações na configuração
Segurança e
de segurança.
Autenticação
- Mudanças na política de gerenciamento de
chaves e criptografia.
A migração do PostgreSQL 12 para o PostgreSQL 16 pode implicar em várias incompatibilidades
devido às mudanças introduzidas nas versões intermediárias (13, 14, 15).
Principais incompatibilidades que pode encontrar:
Versão 13
*Alteração na função EXPLAIN: Mudanças na saída do EXPLAIN, especialmente no formato
JSON, podem afetar scripts que dependem do formato específico.
*Verificação de Nomes de Colunas Duplicados: Verificações mais rigorosas para nomes de
colunas duplicados em consultas.
*Alteração de Planos de Consultas: Melhorias no otimizador de consultas podem mudar os
planos de execução de consultas, impactando o desempenho.
Versão 14
*Mudanças no VACUUM: O comportamento do VACUUM foi ajustado, exigindo possivelmente
mudanças nos scripts de manutenção.
*Ajustes em Tipos de Dados: Algumas funções de manipulação de dados JSON e conversões
entre tipos de dados podem ter comportamentos ligeiramente diferentes.
* Aprimoramentos de Segurança: Melhorias em mecanismos de autenticação, como SCRAM-
SHA-256, podem exigir atualização de configurações de segurança.
Versão 15
*Remoção de Recursos Obsoletos: Remoção de funcionalidades e parâmetros depreciados,
como a função pg_dump e opções do psql.
*Alterações em Agregações: Alterações na implementação de funções agregadas, como sum()
e avg(), podem impactar consultas complexas.
*Integração com pg_stat_statements: Modificações na extensão pg_stat_statements, exigindo
atualizações nos scripts de monitoramento.
Versão 16
*Mudanças em Sintaxe e Funções: Sintaxe SQL e comportamento de funções internas podem
ter sido alterados. Funções como substring(), regexp_replace(), entre outras, podem ter
mudanças sutis.
*Configurações de Parâmetros: Introdução de novos parâmetros de configuração e remoção ou
alteração dos existentes. Parâmetros de desempenho, como random_page_cost, podem ter
ajustes diferentes.
*Revisão de Extensões: Necessidade de verificar a compatibilidade de todas as extensões
utilizadas. Extensões comuns como PostGIS, pg_cron, e pg_partman devem ser testadas e
atualizadas se necessário.
*Alterações em Triggers e Procedimentos Armazenados: Triggers e funções armazenadas
podem precisar ser revisados devido a mudanças no PL/pgSQL e no comportamento das
transações.
*Segurança e Autenticação: Mudanças nos métodos de autenticação e permissões padrão
podem requerer ajustes nas políticas de acesso e nas configurações de segurança.