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(comCASCADEouRESTRICT) 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ão | Descrição | Documentação |
|---|---|---|
| pg_buffercache | Examina o conteúdo do buffer cache compartilhado do PostgreSQL. | Link |
| pglogical | Fornece replicação lógica para PostgreSQL. | Link |
| timescaledb | Extensão de banco de dados de séries temporais para PostgreSQL. | Link |
| pg_trgm | Fornece funções e operadores baseados em trigramas para indexação e busca de similaridade de texto. | Link |
| uuid-ossp | Gera UUIDs (Identificadores Universais Únicos) usando a biblioteca OSSP. | Link |
| pgcrypto | Fornece funções criptográficas para PostgreSQL. | Link |
| vector | Adiciona suporte para vetores e operações de similaridade vetorial. | Link |
| pg_walinspect | Permite inspecionar o Write-Ahead Log (WAL) do PostgreSQL. | Link |
Casos de uso comuns
- Análise de desempenho: Usar
pg_buffercachepara 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
pglogicalpara alta disponibilidade e recuperação de desastres. - Séries temporais: Utilizar
timescaledbpara 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-ossppara 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_walinspectpara auditoria e recuperação.