A mais recente e melhor versão do PostgreSQL, v11, será lançada ainda esta semana! Aqui está uma rápida olhada nos novos recursos desta versão.
Melhorias no particionamento
O maior conjunto de melhorias é para suporte de partição. O Postgres 11 suporta:
- atualizar linhas pode movê-las entre partições
- partições padrão
- criação automática de índice
- restrições de chave estrangeira são suportadas em tabelas particionadas
- índices exclusivos
- push de agregação em partições
- partição por hash
- particionar filhos em servidores remotos (postgres_fdw) pode ser atualizado
- INSERT..ON CONFLICT é compatível com tabelas particionadas
- planos de consulta mais eficientes e execução de consulta mais rápida
Leia mais sobre essas melhorias aqui.
Mais paralelismo
Há um monte de melhorias em toda a linha relacionadas ao aumento do paralelismo. Joins, unions, criação de tabelas e views com “CREATE..AS SELECT”, criação de índices btree e mais benefícios dessas mudanças.
Aqui está um artigo sobre melhorias de desempenho de criação de índice no Postgres 11.
Consultas em conformidade com JIT
Embora desabilitada por padrão no 11, a compilação de consultas JIT baseada em LLVM agora está incorporada ao Postgres. O servidor agora pode optar por compilar determinadas consultas (aquelas com estimativas de execução superiores a um limite) usando LLVM, resultando em consultas mais rápidas. Esta compilação é automática e transparente para a aplicação.
Aqui estão alguns números.
Cobertura de índices
Índices de cobertura, disponíveis em outros RDBMSes, mas não no PostgreSQL, foram adicionados agora. Com isso, é possível ter um índice assim (nova sintaxe):
CREATE INDEX empid_idx ON employees(empid) INCLUDE (empname);
Tal índice inclui atributos extras (aqui “empname”) no próprio índice e torna possível satisfazer consultas como:
SELECT empname FROM employees WHERE empid BETWEEN 1000 and 2000;
inteiramente usando varreduras somente de índice e não tocar no heap.
Leia mais sobre a cobertura de índices aqui.
Procedimentos armazenados
Os procedimentos armazenados são mais uma instância do PostgreSQL jogando com outros RDBMSes. É claro que elas são semelhantes às funções armazenadas que o PostgreSQL suporta há muito tempo, mas a única grande coisa possível apenas usando procedimentos é o controle de transações. Você pode confirmar e reverter transações de procedimentos armazenados.
Dê uma olhada na documentação do CREATE PROCEDURE.
Adicionando colunas a tabelas
Alterar uma tabela para adicionar uma nova coluna NOT NULL com um valor DEFAULT era um pouco trabalhoso no PostgreSQL, pois isso fazia com que o servidor reescrevesse a tabela inteira. Com a v11 agora é possível ter instruções DDL como esta:
ALTER TABLE users ADD COLUMN foo_factor integer NOT NULL DEFAULT 42;
executar em tempo constante. As linhas não são tocadas quando isso é executado e, em vez disso, são atualizadas “preguiçosamente”.
Leia mais sobre esse recurso aqui.
Funções SHA
E, finalmente, aqueles de vocês que usaram o pgcrypto apenas para funções SHA agora podem mudar para as funções incorporadas no PostgreSQL 11:
bench=# \df pg_catalog.sha*
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+--------+------------------+---------------------+------
pg_catalog | sha224 | bytea | bytea | func
pg_catalog | sha256 | bytea | bytea | func
pg_catalog | sha384 | bytea | bytea | func
pg_catalog | sha512 | bytea | bytea | func
(4 rows)
bench=# SELECT sha256('hello');
sha256
--------------------------------------------------------------------
\x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
(1 row)