Skip to main content

Extensões PostgreSQL

Este documento explica o que são extensões do PostgreSQL, como habilitá-las em um banco de dados e lista as extensões disponíveis no DBaaS.

O que é uma extensão do PostgreSQL

Uma extensão empacota objetos SQL e/ou binários (funções, tipos, operadores, índices, procedimentos, views, arquivos de controle e, às vezes, background workers) que estendem a funcionalidade do PostgreSQL sem alterar o código-fonte do servidor. Em vez de compilar alterações no servidor, uma extensão entrega conjuntos reutilizáveis de objetos e scripts de instalação/atualização que podem ser gerenciados com comandos SQL padrão.

Principais características:

  • Conteúdo misto: pode conter apenas scripts SQL (criação de funções, operadores, tipos, etc.) ou também módulos binários (C/C++), dependendo da extensão.
  • Instalação por banco: extensões são instaladas em um banco de dados específico e seus objetos passam a existir naquele banco.
  • Controle de versão: cada extensão tem versões e scripts de atualização, permitindo executar ALTER EXTENSION <extensão> UPDATE TO <versão> para evoluir a extensão sem perder dados.
  • Dependências: uma extensão pode declarar dependências em outras extensões; o PostgreSQL cuida da ordem de instalação/remoção.
  • Schema: por padrão a extensão instala seus objetos em um schema (geralmente public), mas é possível especificar outro schema ao criar a extensão.
  • Ciclo de vida: CREATE EXTENSION / ALTER EXTENSION / DROP EXTENSION (com CASCADE ou RESTRICT) são os comandos para instalar, atualizar e remover extensões.
  • Permissões e segurança: a instalação de algumas extensões podem requerer privilégios elevados (por exemplo, superusuário) porque extensões podem executar código nativo e criar objetos críticos. Se você precisar de uma extensão que requer privilégios elevados, consulte a equipe de suporte da MGC.
  • Boas práticas: testar em ambientes de desenvolvimento, ler a documentação da extensão, instalar em schemas controlados quando adequado e versionar mudanças do banco antes de atualizar ou remover extensões.

Habilitar uma extensão em um banco de dados

Verificar disponibilidade:

  • Para verificar as extensões que já estão instaladas no seu banco de dados, execute no psql:
    \dx+
  • Para listar todas extensões disponíveis (instaladas ou não):
    SELECT name, default_version, installed_version
    FROM pg_available_extensions;
  • Para lista todas as extensões que ainda não foram instaladas:
    SELECT name, default_version
    FROM pg_available_extensions
    WHERE installed_version IS NULL;
  • Para verificar se uma extensão específica está disponível:
    SELECT name, default_version, installed_version
    FROM pg_available_extensions
    WHERE name = 'nome_da_extensão';

Instalar no banco de dados atual:

  • Comando básico:
    CREATE EXTENSION IF NOT EXISTS nome_da_extensão;
  • Para instalar em um schema específico:
    CREATE EXTENSION IF NOT EXISTS nome_da_extensão WITH SCHEMA my_schema;

Verificar as extensões instaladas:

  • Extensões instaladas no banco de dados atual:
    SELECT * FROM pg_extension;

Extensões disponíveis no DBaaS da Magalu Cloud

As seguintes extensões estão disponíveis para instalação em bancos de dados PostgreSQL no DBaaS da Magalu Cloud:

ExtensãoDescriçãoDocumentação
pg_buffercacheExamina o conteúdo do buffer cache compartilhado do PostgreSQL.Link
pglogicalFornece replicação lógica para PostgreSQL.Link
timescaledbExtensão de banco de dados de séries temporais para PostgreSQL.Link
pg_trgmFornece funções e operadores baseados em trigramas para indexação e busca de similaridade de texto.Link
uuid-osspGera UUIDs (Identificadores Universais Únicos) usando a biblioteca OSSP.Link
pgcryptoFornece funções criptográficas para PostgreSQL.Link
vectorAdiciona suporte para vetores e operações de similaridade vetorial.Link
pg_walinspectPermite inspecionar o Write-Ahead Log (WAL) do PostgreSQL.Link

Casos de uso comuns

  • Análise de desempenho: Usar pg_buffercache para entender o uso do cache e otimizar consultas. Por exemplo, identificar tabelas e índices que não estão sendo bem aproveitados.
  • Replicação: Implementar replicação lógica com pglogical para alta disponibilidade e recuperação de desastres.
  • Séries temporais: Utilizar timescaledb para gerenciar grandes volumes de dados de séries temporais. É muito comum em monitoramento de aplicações, IoT e análise financeira.
  • Busca de texto: Melhorar a busca de similaridade com pg_trgm. Por exemplo, implementar buscas "fuzzy" em campos de texto para lidar com erros de digitação.
  • Identificadores únicos: Gerar UUIDs com uuid-ossp para garantir unicidade em registros.
  • Segurança: Proteger dados sensíveis com pgcrypto, como criptografar colunas de dados pessoais.
  • Similaridade vetorial: Implementar buscas baseadas em similaridade com vector, útil em sistemas de recomendação e busca por conteúdo.
  • Auditoria: Inspecionar o WAL com pg_walinspect para auditoria e recuperação.