Compartilhar via


Extensões PostgreSQL no Banco de Dados do Azure para PostgreSQL – Servidor Flexível

APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Flexível

O servidor flexível do Banco de Dados do Azure para PostgreSQL oferece a capacidade de ampliar a funcionalidade do seu banco de dados usando as extensões. As extensões agrupam vários objetos SQL relacionados em um único pacote que pode ser carregado ou removido do seu banco de dados com um comando. Depois de serem carregadas no banco de dados, as extensões funcionam como recursos internos.

Como usar as extensões PostgreSQL

Antes de instalar as extensões do servidor flexível do Banco de Dados do Azure para PostgreSQL, você precisa autorizar o uso dessas extensões.

Usando o portal do Azure:

  1. Selecione sua instância do servidor flexível do Banco de Dados do Azure para PostgreSQL.
  2. No menu de recursos, na seção Configurações, selecione Parâmetros do servidor.
  3. Pesquise o parâmetro azure.extensions.
  4. Selecione as extensões que deseja autorizar. Captura de tela mostrando o servidor flexível do Banco de Dados do Azure para PostgreSQL – permitir a listagem de extensões para instalação.

Usando a CLI do Azure:

Você pode colocar extensões na lista de permitidos por meio do comando parameter set da CLI.

az postgres flexible-server parameter set --resource-group <resource_group>  --server-name <server> --subscription <subscription_id> --name azure.extensions --value <extension_name>,<extension_name>

Usando o Modelo do ARM: O exemplo a seguir permite listar as extensões dblink, dict_xsyn, pg_buffercache em um servidor cujo nome é postgres-test-server:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "flexibleServers_name": {
            "defaultValue": "postgres-test-server",
            "type": "String"
        },
        "azure_extensions_set_value": {
            "defaultValue": " dblink,dict_xsyn,pg_buffercache",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.DBforPostgreSQL/flexibleServers/configurations",
            "apiVersion": "2021-06-01",
            "name": "[concat(parameters('flexibleServers_name'), '/azure.extensions')]",
            "properties": {
                "value": "[parameters('azure_extensions_set_value')]",
                "source": "user-override"
            }
        }
    ]
}

shared_preload_libraries é um parâmetro de configuração do servidor que determina quais bibliotecas devem ser carregadas quando o servidor flexível do Banco de Dados do Azure para PostgreSQL é iniciado. Todas as bibliotecas que usam memória compartilhada devem ser carregadas por meio desse parâmetro. Se sua extensão precisar ser adicionada às bibliotecas de pré-carregamento compartilhadas, siga estas etapas:

Usando o portal do Azure:

  1. Selecione sua instância do servidor flexível do Banco de Dados do Azure para PostgreSQL.
  2. No menu de recursos, na seção Configurações, selecione Parâmetros do servidor.
  3. Pesquise o parâmetro shared_preload_libraries.
  4. Selecione as bibliotecas que deseja adicionar. Captura de tela mostrando o Banco de Dados do Azure para PostgreSQL -definindo a configuração de parâmetro de bibliotecas de pré-carregamento compartilhado para instalação de extensões.

Usando a CLI do Azure:

Você pode definir shared_preload_libraries por meio do comando parameter set da CLI.

az postgres flexible-server parameter set --resource-group <resource_group>  --server-name <server> --subscription <subscription_id> --name shared_preload_libraries --value <extension_name>,<extension_name>

Depois que as extensões forem incluídas na lista de permissões e carregadas, elas deverão ser instaladas em cada banco de dados no qual você planeja usá-las. Para instalar uma extensão específica, execute o comando CREATE EXTENSION. Esse comando carrega os objetos empacotados em seu banco de dados.

Observação

As extensões de terceiros oferecidas no servidor flexível do Banco de Dados do Azure para PostgreSQL são códigos licenciados de código aberto. Atualmente, não oferecemos extensões ou versões de extensões de terceiros com modelos de licenciamento Premium ou proprietário.

A instância servidor flexível do Banco de Dados do Azure para PostgreSQL dá suporte a um subconjunto das principais extensões do PostgreSQL, conforme listado na tabela a seguir. Essas informações também estão disponíveis por meio da execução de SHOW azure.extensions;. As extensões não listadas neste documento não têm suporte no servidor flexível do Banco de Dados do Azure para PostgreSQL. Você não pode criar ou carregar sua própria extensão no servidor flexível do Banco de Dados do Azure para PostgreSQL.

Versões da extensão

As seguintes extensões estão disponíveis no servidor flexível do Banco de Dados do Azure para PostgreSQL:

Observação

As extensões na tabela a seguir com a marca ✔️ exigem que suas bibliotecas correspondentes sejam habilitadas no parâmetro de servidor shared_preload_libraries.

Nome da extensão Descrição PostgreSQL 17 PostgreSQL 16 PostgreSQL 15 PostgreSQL 14 PostgreSQL 13 PostgreSQL 12 PostgreSQL 11
address_standardizer Usado para analisar um endereço em elementos constituintes. Geralmente usado para oferecer suporte a etapa de normalização de endereços de geocodificação. 3.5.0alpha2 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
address_standardizer_data_us Exemplo de conjunto de dados de padronizador de endereço dos EUA 3.5.0alpha2 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
amcheck Funções para verificar a integridade da relação 1.4 1,3 1,3 1,3 1.2 1.2 1,1
anon (versão prévia) Ferramentas de anonimização de dados 1.3.2 1.3.2 1.3.2 1.3.2 1.3.2 1.3.2 1.3.2
azure_ai Integração da IA do Azure e do ML Services para PostgreSQL N/D 1.1.0 1.1.0 1.1.0 1.1.0 1.1.0 N/D
azure_local_ai (versão prévia) Recursos de IA local para PostgreSQL N/D 0.1.0 0.1.0 0.1.0 0.1.0 N/D N/D
azure_storage Integração do Azure para PostgreSQL 1.4 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ N/D
bloom Método de acesso bloom – índice baseado no arquivo de assinatura 1.0 1.0 1.0 1.0 1.0 1.0 1.0
btree_gin Suporte para indexação de tipos de dados comuns no GIN 1,3 1,3 1,3 1,3 1,3 1,3 1,3
btree_gist Suporte para indexação de tipos de dados comuns no GiST 1.7 1.7 1.7 1.6 1.5 1.5 1.5
citext Tipo de dados das cadeias de caracteres que não diferenciam maiúsculas de minúsculas 1.6 1.6 1.6 1.6 1.6 1.6 1.5
cube Tipo de dados dos cubos multidimensionais 1.5 1.5 1.5 1.5 1.4 1.4 1.4
dblink Conectar-se a outros bancos de dados PostgreSQL de dentro de um banco de dados 1.2 1.2 1.2 1.2 1.2 1.2 1.2
dict_int Modelo de dicionário de pesquisa de texto de inteiros 1.0 1.0 1.0 1.0 1.0 1.0 1.0
dict_xsyn Modelo de dicionário de pesquisa de texto do processamento de sinônimo estendido 1.0 1.0 1.0 1.0 1.0 1.0 1.0
earthdistance Calcular grandes distâncias de círculo na superfície da Terra 1,1 1,1 1,1 1,1 1,1 1,1 1,1
fuzzystrmatch Determinar semelhanças e distância entre as cadeias de caracteres 1,2 1.2 1,1 1,1 1,1 1,1 1,1
hstore Tipo de dados para armazenar conjuntos de pares (chave, valor) 1.8 1.8 1.8 1.8 1.7 1.6 1.5
hypopg Índices hipotéticos para o PostgreSQL 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0
intagg Agregador e enumerador de inteiros (obsoleto) 1,1 1,1 1,1 1,1 1,1 1,1 1,1
intarray Suporte a funções, operadores e índice das matrizes 1-D de inteiros 1.5 1.5 1.5 1.5 1,3 1.2 1.2
isn Tipos de dados dos padrões internacionais de numeração de produtos 1.2 1.2 1.2 1.2 1.2 1.2 1.2
lo Manutenção de Objeto Grande 1,1 1,1 1,1 1,1 1,1 1,1 1,1
login_hook Login_hook – gatilho para executar login_hook.login() no momento do logon 1.5 1.5 1.4 1.4 1.4 1.4 1.4
ltree Tipo de dados das estruturas hierárquicas semelhantes a árvores 1,3 1.2 1.2 1.2 1.2 1,1 1,1
orafce Funções e operadores que emulam um subconjunto de funções e pacotes do Oracle RDBMS 4.9 4.4 3.24 3,18 3,18 3,18 3.7
pageinspect Inspecionar o conteúdo das páginas do banco de dados em um nível baixo 1.12 1.12 1.11 1.9 1.8 1.7 1.7
pgaudit Fornece funcionalidade de auditoria 16.0 ✔️ 16.0 ✔️ 1.7 ✔️ 1.6.2 ✔️ 1.5 ✔️ 1.4 ✔️ 1.3.2 ✔️
pg_buffercache Examinar o cache de buffer compartilhado 1.5 1.4 1,3 1,3 1,3 1,3 1,3
pg_cron Agendador de trabalhos para PostgreSQL 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.4-1 ✔️
pgcrypto Funções criptográficas N/D 1,3 1,3 1,3 1,3 1,3 1,3
pg_failover_slots Gerenciador de slots de replicação lógica para fins de failover N/D 1.0.1 ✔️ 1.0.1 ✔️ 1.0.1 ✔️ 1.0.1 ✔️ 1.0.1 ✔️ 1.0.1 ✔️
pg_freespacemap Examinar o mapa de espaço livre (FSM) 1.2 1.2 1.2 1.2 1.2 1.2 1.2
pg_hint_plan Torna possível ajustar os planos de execução do PostgreSQL usando as chamadas dicas nos comentários do SQL. 1.7.0 ✔️ 1.6.0 ✔️ 1.5 ✔️ 1.4 ✔️ 1.3.7 ✔️ 1.3.7 ✔️ 1.3.7 ✔️
pglogical Replicação lógica do PostgreSQL 2.4.4 ✔️ 2.4.4 ✔️ 2.4.2 ✔️ 2.4.1 ✔️ 2.4.1 ✔️ 2.4.1 ✔️ 2.4.1 ✔️
pg_partman Extensão usada para gerenciar tabelas particionadas por hora ou ID 5.0.1 ✔️ 5.0.1 ✔️ 4.7.1 ✔️ 4.6.1 ✔️ 4.5.0 ✔️ 4.5.0 ✔️ 4.5.0 ✔️
pg_prewarm Dados de relação pré-guerra 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️
pg_repack Reorganiza as tabelas em bancos de dados PostgreSQL com bloqueios mínimos 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7
pgrouting Extensão de PgRouting N/D N/D 3.5.0 3.3.0 3.3.0 3.3.0 3.3.0
pgrowlocks Mostrar informações de bloqueio em nível de linha 1.2 1.2 1.2 1.2 1.2 1.2 1,2
pg_squeeze Uma ferramenta para remover o espaço não usado de uma relação. 1.7 ✔️ 1.6 ✔️ 1.6 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️
pg_stat_statements Acompanhar as estatísticas de planejamento e execução de todas as instruções SQL executadas 1.11 ✔️ 1.10 ✔️ 1.10 ✔️ 1.9 ✔️ 1.8 ✔️ 1.7 ✔️ 1.6 ✔️
pgstattuple Mostrar estatísticas de nível de tupla 1.5 1.5 1.5 1.5 1.5 1.5 1.5
pg_trgm Medição de similaridade de texto e pesquisa de índice com base em trigramas 1.6 1.6 1.6 1.6 1.5 1.4 1.4
pg_visibility Examinar as informações de visibilidade do mapa de visibilidade (VM) e do nível da página 1.2 1.2 1.2 1.2 1.2 1.2 1,2
plpgsql Linguagem de procedimento PL/pgSQL 1.0 1.0 1.0 1.0 1.0 1.0 1.0
plv8 Linguagem de procedimento confiável PL/JavaScript (v8) 3.1.7 3.1.7 3.1.7 3.0.0 3.0.0 3.0.0 3.0.0
postgis Funções e tipos espaciais de geometria e geografia do PostGIS 3.5.0alpha2 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_raster Funções e tipos de rasterização de PostGIS 3.5.0alpha2 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_sfcgal Funções SFCGAL do PostGIS 3.5.0alpha2 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_tiger_geocoder Geocodificador PostGIS Tiger e geocodificador reverso 3.5.0alpha2 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_topology Tipos e funções espaciais da topologia do PostGIS 3.5.0alpha2 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgres_fdw Wrapper de dados estrangeiros dos servidores PostgreSQL remotos 1,1 1,1 1,1 1,1 1.0 1.0 1.0
postgres_protobuf Buffers de protocolo para PostgreSQL 0,2 0,2 0,2 0,2 0,2 0,2 N/D
semver Tipo de dados de versão semântica 0.32.1 0.32.1 0.32.0 0.32.0 0.32.0 0.32.0 0.32.0
session_variable Session_variable – registro e manipulação de variáveis e constantes de sessão 3.3 3.3 3.3 3.3 3.3 3.3 3.3
sslinfo Informações sobre os certificados SSL 1.2 1.2 1.2 1.2 1.2 1.2 1.2
tablefunc Funções que manipulam tabelas inteiras, incluindo a tabela de referência cruzada 1.0 1.0 1.0 1.0 1.0 1.0 1.0
tds_fdw Wrapper de dados estrangeiro para consultar um banco de dados TDS (Sybase ou Microsoft SQL Server) 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3
timescaledb Permite inserções escalonáveis e consultas complexas em dados de série temporal 2.13.0 ✔️ 2.13.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 1.7.4 ✔️
tsm_system_rows Método TABLESAMPLE, que aceita o número de linhas como um limite 1.0 1.0 1.0 1.0 1.0 1.0 1.0
tsm_system_time Método TABLESAMPLE, que aceita o tempo em milissegundos como um limite 1.0 1.0 1.0 1.0 1.0 1.0 1.0
unaccent Dicionário de pesquisa de texto que remove ênfases 1,1 1,1 1,1 1,1 1,1 1,1 1,1
uuid-ossp Gerar identificadores universais exclusivos (UUIDs) 1,1 1,1 1,1 1,1 1,1 1,1 1,1
vector Tipos de dados de vetor e métodos de acesso ivfflat e hnsw 0.7.0 0.7.0 0.7.0 0.7.0 0.7.0 0.7.0 0.5.1

Atualizar extensões do PostgreSQL

Atualizações in-loco de extensões de banco de dados são permitidas por meio de um comando simples. Esse recurso permite que os clientes atualizem automaticamente suas extensões de terceiros para as versões mais recentes, mantendo sistemas atuais e seguros sem esforço manual.

Atualizar extensões

Para atualizar uma extensão instalada para a versão mais recente disponível com suporte pelo Azure, use o seguinte comando SQL:

ALTER EXTENSION <extension_name> UPDATE;

Esse comando simplifica o gerenciamento de extensões de banco de dados, permitindo que os usuários atualizem manualmente para a versão mais recente aprovada pelo Azure, melhorando a compatibilidade e a segurança.

Limitações

Embora a atualização de extensões seja simples, há certas limitações:

  • Seleção de uma versão específica: O comando não dá suporte à atualização para versões intermediárias de uma extensão. Ele sempre atualiza para a versão mais recente disponível.
  • Downgrade: não dá suporte ao downgrade de uma extensão para uma versão anterior. Se for necessário fazer um downgrade, ele poderá exigir assistência de suporte e dependerá da disponibilidade da versão anterior.

Extensões instaladas

Para listar as extensões instaladas no momento no banco de dados, use o seguinte comando SQL:

SELECT * FROM pg_extension;

Extensões disponíveis e suas versões

Para verificar quais versões de uma extensão estão disponíveis para a instalação atual do seu banco de dados, consulte a exibição pg_available_extensions do catálogo do sistema. Por exemplo, para determinar a versão disponível para a extensão azure_ai, execute:

SELECT * FROM pg_available_extensions WHERE name = 'azure_ai';

Esses comandos fornecem informações necessárias sobre as configurações de extensão do banco de dados, ajudando a manter seus sistemas de forma eficiente e segura. Ao habilitar atualizações fáceis para as versões de extensão mais recentes, o Banco de Dados do Azure para PostgreSQL continua a dar suporte ao gerenciamento robusto, seguro e eficiente de seus aplicativos de banco de dados.

Considerações específicas do servidor flexível do Banco de Dados do Azure para PostgreSQL

A seguir, há uma lista de extensões com suporte que exigem algumas considerações específicas quando usadas no serviço de servidor flexível do Banco de Dados do Azure para PostgreSQL. A lista está em ordem alfabética.

O dblink permite que você se conecte de uma instância do servidor flexível do Banco de Dados do Azure para PostgreSQL a outra, ou a outro banco de dados no mesmo servidor. O servidor flexível do Banco de Dados do Azure para PostgreSQL dá suporte a conexões de entrada e saída para qualquer servidor PostgreSQL. O servidor de envio precisa permitir conexões de saída para o servidor de recebimento. Dessa forma, o servidor de recebimento precisa permitir conexões do servidor de envio por meio de seu firewall.

Se você planeja usar essa extensão, recomendamos implantar seus servidores com integração de rede virtual. Por padrão, a integração da rede virtual permite conexões entre servidores na rede virtual. Você também pode optar por usar grupos de segurança de rede da rede virtual para personalizar o acesso.

pg_buffercache

pg_buffercache pode ser usado para estudar o conteúdo de shared_buffers. Usando essa extensão, você consegue saber se uma relação específica é armazenada em cache ou não (em shared_buffers). Essa extensão pode ajudar você a solucionar problemas de desempenho (problemas de desempenho relacionados ao cache).

Essa extensão está integrada à instalação principal do PostgreSQL e é fácil de instalar.

CREATE EXTENSION pg_buffercache;

pg_cron

pg_cron é um agendador de trabalhos simples e baseado em CRON para PostgreSQL, que é executado dentro do banco de dados como uma extensão. A extensão pg_cron pode ser usada para executar tarefas de manutenção agendadas em um banco de dados do PostgreSQL. Por exemplo, você pode executar o vácuo periódico de uma tabela ou remover trabalhos de dados antigos.

pg_cron pode executar vários trabalhos em paralelo, mas no máximo uma instância de um trabalho é executada por vez. Se uma segunda execução for iniciada antes da conclusão da primeira, a segunda execução ficará fila e será iniciada assim que a primeira for concluída. Dessa forma, é garantido que os trabalhos sejam executados exatamente quantas vezes forem agendado e não sejam executados simultaneamente.

Alguns exemplos:

Para excluir dados antigos no sábado às 3h30 (GMT).

SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);

Para executar o aspirador todos os dias às 10h (GMT) no banco de dados padrão postgres.

SELECT cron.schedule('0 10 * * *', 'VACUUM');

Para cancelar o agendamento de todas as tarefas do pg_cron.

SELECT cron.unschedule(jobid) FROM cron.job;

Para ver todos os trabalhos agendados no momento com pg_cron.

SELECT * FROM cron.job;

Para executar o aspirador todos os dias às 10:00 (GMT) no banco de dados "testcron" na conta de função azure_pg_admin.

SELECT cron.schedule_in_database('VACUUM','0 10 * * * ','VACUUM','testcron',null,TRUE);

Observação

A extensão pg_cron é pré-carregada em shared_preload_libraries para cada instância do servidor flexível do Banco de Dados PostgreSQL do Azure dentro do banco de dados postgres para fornecer a você a capacidade de agendar trabalhos a serem executados em outros bancos de dados dentro da instância de servidor flexível do Banco de Dados do Azure para PostgreSQL sem comprometer a segurança. Entretanto, por motivos de segurança, você ainda precisa permitir a lista pg_cron e instalá-la usando o comando CREATE EXTENSION.

A partir com a versão do pg_cron 1.4, você pode usar as funções cron.schedule_in_database e cron.alter_job para agendar seu trabalho em um banco de dados específico e atualizar um agendamento existente, respectivamente.

Alguns exemplos:

Para excluir dados antigos no sábado, às 3h30 (GMT) no DBName do banco de dados.

SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');

Observação

A função cron_schedule_in_database permite o nome de usuário como parâmetro opcional. Definir o nome do usuário como um valor não nulo requer privilégio de superusuário do PostgreSQL e não é suportado no servidor flexível do Banco de Dados do Azure para PostgreSQL. Os exemplos anteriores mostram a execução dessa função com o parâmetro opcional de nome de usuário omitido ou definido como nulo, o que executa o trabalho no contexto do usuário que está agendando o trabalho, que deve ter privilégios da função azure_pg_admin.

Para atualizar ou alterar o nome do banco de dados do agendamento existente

SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');

pg_failover_slots

A extensão PG Failover Slots aprimora o servidor flexível do Banco de Dados do Azure para PostgreSQL ao operar com servidores habilitados para replicação lógica e alta disponibilidade. Ela aborda efetivamente o desafio dentro do mecanismo PostgreSQL padrão que não preserva slots de replicação lógica após um failover. A manutenção desses slots é fundamental para evitar pausas de replicação ou incompatibilidades de dados durante as alterações de função de servidor primário, garantindo a continuidade operacional e a integridade dos dados.

A extensão simplifica o processo de failover gerenciando a transferência, a limpeza e a sincronização necessárias de slots de replicação, fornecendo assim uma transição perfeita durante as alterações de função de servidor. A extensão tem suporte para as versões 11 a 16 do PostgreSQL.

Você pode encontrar mais informações e como usar a extensão de Slots de Failover PG na página do GitHub.

Habilitar pg_failover_slots

Para habilitar a extensão PG Failover Slots para sua instância do servidor flexível do Banco de Dados do Azure para PostgreSQL, você precisa modificar a configuração do servidor incluindo a extensão nas bibliotecas de pré-carregamento compartilhadas do servidor e ajustando um parâmetro específico do servidor. Veja o processo:

  1. Adicione pg_failover_slots às bibliotecas de pré-carregamento compartilhadas do servidor atualizando o parâmetro shared_preload_libraries.
  2. Altere o parâmetro do servidor hot_standby_feedback para on.

Qualquer alteração no parâmetro shared_preload_libraries exige uma reinicialização do servidor para entrar em vigor.

Usando o portal do Azure:

  1. Selecione sua instância do servidor flexível do Banco de Dados do Azure para PostgreSQL.
  2. No menu de recursos, na seção Configurações, selecione Parâmetros do servidor.
  3. Procure o parâmetro shared_preload_libraries e edite seu valor para incluir pg_failover_slots.
  4. Pesquise o parâmetro hot_standby_feedback e defina seu valor como on.
  5. Escolha Salvar para preservar as alterações. Agora, você tem a opção de Salvar e reiniciar. Escolha essa opção para garantir que as alterações tenham efeito, pois a modificação de shared_preload_libraries exige a reinicialização do servidor.

Ao selecionar Salvar e reiniciar, o servidor será reinicializado automaticamente, aplicando as alterações que acabaram de ser feitas. Quando o servidor estiver online novamente, a extensão PG Failover Slots estará habilitada e operacional em sua instância primária do servidor flexível do Banco de Dados do Azure para PostgreSQL, pronta para lidar com slots de replicação lógica durante failovers.

pg_hint_plan

pg_hint_plan possibilita ajustar os planos de execução do PostgreSQL usando as chamadas "dicas" nos comentários do SQL, como:

/*+ SeqScan(a) */

pg_hint_plan lê frases de dica em um comentário de formulário especial fornecido com a instrução SQL de destino. O formulário especial começa pela sequência de caracteres "/*+" e termina com "*/". As frases de dica consistem no nome da dica e nos seguintes parâmetros, entre parênteses e delimitados por espaços. Novas linhas para legibilidade podem delimitar cada frase sugerida.

Exemplo:

  /*+
      HashJoin(a b)
      SeqScan(a)
    */
    SELECT *
      FROM pgbench_branches b
      JOIN pgbench_accounts an ON b.bid = a.bid
     ORDER BY a.aid;

O exemplo anterior faz com que o planejador use os resultados de um seq scan na tabela a para ser combinado com a tabela b como um hash join.

Para instalar o pg_hint_plan, além disso, para permitir listá-lo, conforme mostrado em como usar as extensões do PostgreSQL, você precisa incluí-lo nas bibliotecas de pré-carregamento compartilhadas do servidor. Uma alteração no parâmetro shared_preload_libraries do Postgres exige uma shared_preload_libraries para entrar em vigor. Altere os parâmetros usando o portal do Azure ou a CLI do Azure.

Usando o portal do Azure:

  1. Selecione sua instância do servidor flexível do Banco de Dados do Azure para PostgreSQL.
  2. No menu de recursos, na seção Configurações, selecione Parâmetros do servidor.
  3. Procure o parâmetro shared_preload_libraries e edite seu valor para incluir pg_hint_plan.
  4. Escolha Salvar para preservar as alterações. Agora, você tem a opção de Salvar e reiniciar. Escolha essa opção para garantir que as alterações tenham efeito, pois a modificação de shared_preload_libraries exige a reinicialização do servidor. Agora você pode habilitar pg_hint_plan em seu servidor flexível do Banco de Dados do Azure para PostgreSQL. Conecte-se ao banco de dados e emita o seguinte comando:
CREATE EXTENSION pg_hint_plan;

pg_prewarm

A extensão pg_prewarm carrega dados relacionais no cache. O pré-aquecimento dos caches significa que as consultas têm tempos de resposta melhores na primeira execução após uma reinicialização. A funcionalidade de preaquecimento automático não está disponível atualmente no servidor flexível do Banco de Dados do Azure para PostgreSQL.

pg_repack

Uma pergunta típica que as pessoas fazem quando tentam usar essa extensão pela primeira vez é: O pg_repack é uma extensão ou um executável do lado do cliente, como o psql ou o pg_dump?

A resposta é que, na verdade, ele é ambos. pg_repack/lib contém o código da extensão, incluindo o esquema e os artefatos SQL que ele cria, e a biblioteca C que implementa o código de várias dessas funções. Por outro lado, pg_repack/bin mantém o código do aplicativo cliente, que sabe como interagir com os artefatos de programação criados pela extensão. Esse aplicativo cliente tem como objetivo facilitar a complexidade da interação com as diferentes interfaces exibidas pela extensão do lado do servidor, oferecendo ao usuário algumas opções de linha de comando que são mais fáceis de entender. O aplicativo cliente sem a extensão criada no banco de dados para o qual ele está apontado é inútil. A extensão do lado do servidor, por si só, seria totalmente funcional, mas exigiria que o usuário entendesse um padrão de interação complicado que consiste na execução de consultas para recuperar dados que são usados como entrada para as funções implementadas pela extensão.

Permissão negada para reempacotamento do esquema

Até o momento, devido à maneira como concedemos permissões ao esquema de reempacotamento criado por esta extensão, só há suporte para executar a funcionalidade pg_repack a partir do contexto de azure_pg_admin.

Você pode notar que se o proprietário de uma tabela, que não é azure_pg_admin, tentar executar o pg_repack, ele acabará recebendo um erro como o seguinte:

NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: ERROR:  permission denied for schema repack
LINE 1: select repack.version(), repack.version_sql()

Para evitar esse erro, certifique-se de executar o pg_repack no contexto de azure_pg_admin.

pg_stat_statements

A extensão pg_stat_statements fornece uma exibição de todas as consultas que foram executadas em seu banco de dados. Isso é útil para entender como é o desempenho da carga de trabalho de consulta em um sistema de produção.

A extensão pg_stat_statements é pré-carregada em shared_preload_libraries em cada instância de servidor flexível do Banco de Dados do Azure para PostgreSQL para fornecer a você formas de acompanhar as estatísticas de execução das instruções SQL. No entanto, por razões de segurança, você ainda precisa adicionar à allowlist a extensão pg_stat_statements e instalá-la usando o comando CREATE EXTENSION. A configuração pg_stat_statements.track, que controla quais instruções são contadas por extensão, tem top como padrão, que significa que todas as instruções emitidas diretamente por clientes são rastreadas. Dois outros níveis de rastreamento são none e all. Essa configuração é configurável como um parâmetro de servidor.

O pg_stat_statements oferece informações de execução de consulta como benefício, mas prejudica o desempenho do servidor, pois registra todas as instruções SQL. Se você não está usando ativamente a extensão pg_stat_statements, recomendamos que você defina pg_stat_statements.track como none. Alguns serviços de monitoramento de terceiros podem depender do pg_stat_statements para fornecer análises de desempenho de consultas. Portanto, confirme se este é o seu caso ou não.

postgres_fdw

postgres_fdw permite que você se conecte de uma instância do servidor flexível do Banco de Dados do Azure para PostgreSQL a outra, ou a outro banco de dados no mesmo servidor. O servidor flexível do Banco de Dados do Azure para PostgreSQL dá suporte a conexões de entrada e saída para qualquer servidor PostgreSQL. O servidor de envio precisa permitir conexões de saída para o servidor de recebimento. Dessa forma, o servidor de recebimento precisa permitir conexões do servidor de envio por meio de seu firewall.

Se você planeja usar essa extensão, recomendamos implantar seus servidores com integração de rede virtual. Por padrão, a integração da rede virtual permite conexões entre servidores na rede virtual. Você também pode optar por usar grupos de segurança de rede da rede virtual para personalizar o acesso.

TimescaleDB

O TimescaleDB é um banco de dados de série temporal empacotado como uma extensão para PostgreSQL. Ele fornece funções analíticas orientadas a tempo, otimizações e escala o Postgres para cargas de trabalho de série temporal. Saiba mais sobre o TimescaleDB, uma marca registrada da Timescale, Inc. O servidor flexível do Banco de Dados do Azure para PostgreSQL fornece a edição Apache-2 do TimescaleDB.

Instalar o TimescaleDB

Para instalar o TimescaleDB, além de permitir a listagem, conforme mostrado acima, você precisa incluí-lo nas bibliotecas de pré-carregamento compartilhadas do servidor. Uma alteração no parâmetro shared_preload_libraries do Postgres exige uma shared_preload_libraries para entrar em vigor. Altere os parâmetros usando o portal do Azure ou a CLI do Azure.

Usando o portal do Azure:

  1. Selecione sua instância do servidor flexível do Banco de Dados do Azure para PostgreSQL.
  2. No menu de recursos, na seção Configurações, selecione Parâmetros do servidor.
  3. Procure o parâmetro shared_preload_libraries e edite seu valor para incluir TimescaleDB.
  4. Escolha Salvar para preservar as alterações. Agora, você tem a opção de Salvar e reiniciar. Escolha essa opção para garantir que as alterações tenham efeito, pois a modificação de shared_preload_libraries exige a reinicialização do servidor. Agora você pode habilitar o TimescaleDB em seu servidor flexível do Banco de Dados do Azure para PostgreSQL. Conecte-se ao banco de dados e emita o seguinte comando:
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

Dica

Se você receber um erro, confirme se você reiniciou o servidor depois de salvar shared_preload_libraries.

Agora você pode criar uma hipertabela do TimescaleDB do zero ou migrar os dados de série temporal existentes no PostgreSQL.

Restaurar um banco de dados da Escala de tempo usando pg_dump e pg_restore

Para restaurar um banco de dados da Escala de tempo usando pg_dump e pg_restore, você precisará executar dois procedimentos auxiliares no banco de dados de destino: timescaledb_pre_restore() e timescaledb_post restore().

Primeiro, prepare o banco de dados de destino:

--create the new database where you want to perform the restore
CREATE DATABASE tutorial;
\c tutorial --connect to the database
CREATE EXTENSION timescaledb;

SELECT timescaledb_pre_restore();

Agora você pode executar pg_dump no banco de dados original e executar pg_restore. Após a restauração, lembre-se de executar o seguinte comando no banco de dados restaurado:

SELECT timescaledb_post_restore();

Para obter mais detalhes sobre o método de restauração com banco de dados habilitado para Timescale, confira a documentação do Timescale.

Restaurando um banco de dados da Escala de tempo usando timescaledb-backup

Durante a execução do procedimento SELECT timescaledb_post_restore() listado acima, você poderá ver erro de permissões negadas ao atualizar o sinalizador timescaledb.restoring. Isso ocorre devido à permissão ALTER DATABASE limitada nos serviços de banco de dados de PaaS de nuvem. Nesse caso, você pode executar um método alternativo usando a ferramenta timescaledb-backup para fazer backup e restaurar o banco de dados do Timescale. Timescaledb-backup é um programa para tornar o despejo e a restauração de um banco de dados TimescaleDB mais simples e menos propenso a erros e aumentar seu desempenho.
Para isso, você deve fazer o que é mostrado abaixo

  1. Instale as ferramentas conforme detalhado aqui
  2. Crie uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL e um banco de dados de destino
  3. Habilitar a extensão do Timescale conforme mostrado acima
  4. Conceder a função azure_pg_admin ao usuário que será usada por ts-restore
  5. Executar ts-restore para restaurar o banco de dados

Mais detalhes sobre esses utilitários podem ser encontrados aqui.

Extensões e atualização da versão principal

O servidor flexível do Banco de Dados do Azure para PostgreSQL introduziu um recurso de atualização de versão principal in-loco que executa uma atualização in-loco da instância do servidor flexível do Banco de Dados do Azure para PostgreSQL com apenas um clique. A atualização de versão principal in-loco simplifica o processo de atualização do servidor flexível do Banco de Dados do Azure para PostgreSQL, minimizando a interrupção dos usuários e aplicativos que acessam o servidor. A atualização de versão principal in-loco não dá suporte a extensões específicas e há algumas limitações para atualizar certas extensões. As extensões Timescaledb, pgaudit, dblink, orafce e postgres_fdw não têm suporte para todas as versões do servidor flexível do Banco de Dados do Azure para PostgreSQL ao usar o recurso de atualização de versão principal in-loco.