Em 3 de outubro de 2019, foi lançada uma nova versão do banco de dados de código aberto mais avançado do mundo. O PostgreSQL 12 agora está disponível com melhorias notáveis no desempenho de consultas (particularmente em conjuntos de dados maiores e utilização geral do espaço), entre outros recursos importantes.
Neste blog, veremos esses novos recursos e mostraremos como obter e instalar esta nova versão do PostgreSQL 12. Também exploraremos algumas considerações a serem levadas em consideração ao atualizar.
Recursos e melhorias do PostgreSQL 12
Vamos começar mencionando alguns dos recursos e melhorias mais importantes desta nova versão do PostgreSQL.
Indexação
- Há uma otimização para utilização de espaço e desempenho de leitura/gravação para índices B-Tree.
- Redução da sobrecarga do WAL para a criação de índices GiST, GIN e SP-GiST.
- Você pode realizar consultas de K-vizinho mais próximo com o operador de distância (<->) usando índices SP-GiST.
- Reconstrua índices sem bloquear gravações em um índice por meio do comando REINDEX CONCURRENTLY, permitindo que os usuários evitem cenários de inatividade para reconstruções de índice demoradas.
Particionamento
- Há melhorias nas consultas em tabelas particionadas, principalmente para tabelas com milhares de partições que só precisam recuperar dados de um subconjunto limitado.
- Melhorias de desempenho para adicionar dados a tabelas particionadas com INSERT e COPY.
- Você poderá anexar uma nova partição a uma tabela sem bloquear consultas.
SQL
- Agora você pode executar consultas em documentos JSON usando expressões de caminho JSON definidas no padrão SQL/JSON e eles podem utilizar os mecanismos de indexação existentes para documentos armazenados no formato JSONB para recuperar dados com eficiência.
- COM consultas agora podem ser automaticamente inlineadas pelo PostgreSQL 12 (se não for recursiva, não tiver nenhum efeito colateral e for referenciada apenas uma vez em uma parte posterior de uma consulta), o que, por sua vez, pode ajudar a aumentar o desempenho de muitas consultas existentes.
- Apresenta "colunas geradas". Esse tipo de coluna calcula seu valor a partir do conteúdo de outras colunas na mesma tabela. O armazenamento desse valor calculado também é suportado.
Internacionalização
- O PostgreSQL 12 estende seu suporte a agrupamentos ICU, permitindo que os usuários definam "agrupamentos não determinísticos" que podem, por exemplo, permitir comparações que não diferenciam maiúsculas de minúsculas ou acentos.
Autenticação
- Apresenta a criptografia do lado do cliente e do servidor para autenticação em interfaces GSSAPI.
- O serviço PostgreSQL é capaz de descobrir servidores LDAP se for compilado com OpenLDAP.
- Autenticação multifator, usando a opção clientcert=verify-full e um método de autenticação adicional configurado no arquivo pg_hba.conf.
Se você quiser aproveitar esses novos recursos e melhorias, você pode ir até a página de download e obter a última versão do PostgreSQL. Se você precisar de uma configuração de HA, aqui está um blog para mostrar como instalar e configurar o PostgreSQL para HA.
Como instalar o PostgreSQL 12
Para este exemplo, usaremos o CentOS7 como sistema operacional. Portanto, precisamos acessar o site de download do sistema operacional baseado em RedHat e instalar a versão correspondente.
$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Ele instalará o repositório PostgreSQL com pacotes estáveis, de teste e de origem.
$ head /etc/yum.repos.d/pgdg-redhat-all.repo
# PGDG Red Hat Enterprise Linux / CentOS stable repositories:
[pgdg12]
name=PostgreSQL 12 for RHEL/CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
...
Em seguida, instale os pacotes cliente e servidor PostgreSQL12. Ele instalará algumas dependências do python.
$ yum install postgresql12 postgresql12-server
Agora, você pode inicializar seu novo banco de dados PostgreSQL 12.
$ /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK
E habilite/inicie o serviço PostgreSQL.
$ systemctl enable postgresql-12
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.
$ systemctl start postgresql-12
E é isso. Você tem a nova versão do PostgreSQL em execução.
$ psql
psql (12.0)
Type "help" for help.
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 12.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
Agora que você instalou a última versão do PostgreSQL, você pode migrar seus dados para este novo nó de banco de dados.
Atualizando para o PostgreSQL 12
Se você deseja atualizar sua versão atual do PostgreSQL para esta nova, você tem três opções principais que realizarão esta tarefa.
- pg_dump :é uma ferramenta de backup lógico que permite despejar seus dados e restaurá-los na nova versão do PostgreSQL. Aqui você terá um tempo de inatividade que irá variar de acordo com o tamanho dos seus dados. Você precisa parar o sistema ou evitar novos dados no nó mestre, executar o pg_dump, mover o dump gerado para o novo nó do banco de dados e restaurá-lo. Durante esse período, você não pode gravar em seu banco de dados PostgreSQL mestre para evitar inconsistência de dados.
- Pg_upgrade :É uma ferramenta do PostgreSQL para atualizar sua versão do PostgreSQL no local. Pode ser perigoso em um ambiente de produção e não recomendamos esse método nesse caso. Usando este método, você também terá tempo de inatividade, mas provavelmente será consideravelmente menor do que usando o método pg_dump anterior.
- Replicação lógica :Desde o PostgreSQL 10, você pode usar esse método de replicação que permite realizar atualizações de versão principais com tempo de inatividade zero (ou quase zero). Dessa forma, você pode adicionar um nó de espera na última versão do PostgreSQL e, quando a replicação estiver atualizada, poderá realizar um processo de failover para promover o novo nó do PostgreSQL.
Considerações antes de atualizar para o PostgreSQL 12
Em geral, para todo processo de atualização, e em toda tecnologia, há vários pontos a serem considerados. Vejamos alguns dos principais.
- Os tipos de dados abstime, reltime e tinterval foram removidos.
- As configurações do recovery.conf estão no arquivo postgresql.conf e não são mais usadas. Se você tiver este arquivo criado, o servidor não será iniciado. Os arquivos recovery.signal e standby.signal agora são usados para alternar para o modo não primário. A configuração trigger_file foi renomeada para promote_trigger_file e a configuração standby_mode foi removida.
- As várias especificações recovery_target conflitantes não são permitidas.
- A especificação de “-f” para enviar o conteúdo do dump para a saída padrão é necessária em pg_restore.
- O comprimento máximo de entrada de índice é reduzido em oito bytes nos índices B-Tree, para melhorar o tratamento de entradas duplicadas. A operação REINDEX em um índice pg_upgrade'd de uma versão anterior pode falhar.
- DROP IF EXISTS FUNCTION/PROCEDURE/AGGREGATE/ROUTINE gera um erro se nenhuma lista de argumentos for fornecida e houver vários objetos correspondentes.
Para obter informações mais detalhadas sobre os novos recursos do PostgreSQL 12 e considerações antes de migrar para ele, você pode consultar a página oficial de Notas de versão.