Extensões do PostgreSQL

O PostgreSQL fornece uma maneira de estender a funcionalidade de um banco de dados agrupando objetos SQL em um pacote e usando-os como uma unidade. Nesta página, descrevemos as extensões do PostgreSQL e as extensões compatíveis com o Cloud SQL.

Como usar extensões do PostgreSQL

Só é possível instalar as extensões compatíveis com o Cloud SQL.

Como instalar uma extensão

Antes de usar uma extensão, instale-a:

Requisito para privilégios de superusuário

No Cloud SQL, as extensões só podem ser criadas por usuários que fazem parte do papel cloudsqlsuperuser. Quando você cria uma nova instância do PostgreSQL, o usuário postgres padrão é criado para você (embora seja necessário definir a senha do usuário). O usuário postgres padrão faz parte do papel cloudsqlsuperuser. Para mais informações, consulte Usuários do PostgreSQL.

Conexões entre bancos de dados

As instâncias de destino para conexões precisam estar na mesma rede VPC que a instância de conexão.

No Console do Google Cloud, não é possível escolher o botão Permitir apenas conexões SSL para instâncias de cluster. Além disso, para se conectar a outros bancos de dados na mesma instância, não é possível definir o host como localhost ou como 127.0.0.1. Em vez disso, você precisa usar o endereço IP mostrado para sua instância no Console do Google Cloud.

Como solicitar suporte para uma nova extensão

Não é possível criar suas próprias extensões com o Cloud SQL.

Para solicitar suporte para uma extensão, adicione um voto Eu também! para seu problema no Issue Tracker (em Cloud SQL) ou crie um novo problema lá.

Extensões PostgreSQL aceitas pelo Cloud SQL

Para informações sobre como usar uma extensão específica, consulte o link da documentação em uma das tabelas abaixo.

O suporte do Cloud SQL para extensões do PostgreSQL pode ser dividido nestas categorias:

PostGIS

A extensão PostGIS 3.0 é compatível com o Cloud SQL para PostgreSQL em todas as versões principais.

Elas incluem as seguintes extensões:

Para mais informações, consulte Instalação do PostGIS.

Extensões de tipo de dados

Extensão Descrição
btree_gin Fornece amostras de classes de operadores GIN que implementam o comportamento equivalente de B-tree.
btree_gist Fornece classes de operadores de índice GiST que implementam o comportamento equivalente de B-tree.
chkpass Implementa um tipo de dados de chkpass projetado para armazenar senhas criptografadas. Não compatível com o PostgreSQL 12 para Cloud SQL.
citext Fornece um tipo citext de string de caracteres indiferente a maiúsculas.
O Cloud SQL para PostgreSQL 9.6 usa a versão 1.3. O PostgreSQL 11 usa a versão 1.5. O PostgreSQL 12 e 13 usam a versão 1.6.
cube Implementa um tipo de dados cube para representar cubos multidimensionais. O Cloud SQL para PostgreSQL 9.6 usa a versão 1.2. O PostgreSQL 11 usa a versão 1.3. O PostgreSQL 12 e 13 usam a versão 1.4.
hstore Implementa o tipo de dados hstore para armazenar conjuntos de pares de chave-valor em um único valor do PostgreSQL. O Cloud SQL para PostgreSQL 9.6 usa a versão 1.4. O PostgreSQL 11 usa a versão 1.5. O PostgreSQL 12 e 13 usam a versão 1.6.
isn Fornece tipos de dados para alguns padrões internacionais de numeração de produtos. O Cloud SQL para PostgreSQL 9.6 usa a versão 1.1. O PostgreSQL 11, 12 e 13 usam a versão 1.2.
ip4r (em inglês) Fornece tipos de dados para endereços IPv4/v6 e intervalos de endereços, além de suporte a índice.
ltree Implementa um tipo de dados ltree para representar rótulos de dados armazenados em uma estrutura hierárquica do tipo árvore. O Cloud SQL para PostgreSQL 9.6, 10, 11 e 12 usam a versão 1.1. O PostgreSQL 13 usa a versão 1.2.
lo Suporte para o gerenciamento de grandes objetos (também chamados de LOs ou BLOBs). O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.1.
postgresql-hll Apresenta um novo tipo de dados, hll, que é uma estrutura de dados do HyperLogLog. O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 2.14 do postgresql-hll. Consulte também a seção postgresql-hll abaixo.
prefix Fornece correspondência de prefixo e suporte a índice.

Extensões de linguagem

Extensão Descrição
plpgsql Uma linguagem processual carregável para criar funções, procedimentos e acionadores. Também é possível usar essa linguagem para execução direta de código em blocos DO. O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.

Extensões diversas

Extensão Descrição
dblink Fornece funções para se conectar aos bancos de dados PostgreSQL de dentro de uma sessão de banco de dados. Consulte também a seção dblink abaixo.
dict_int Um complemento de modelo de dicionário para pesquisa de texto completo que controla a indexação de números inteiros.
earthdistance Fornece duas abordagens para calcular grandes distâncias do círculo na superfície da Terra.
fuzzystrmatch Fornece várias funções para determinar semelhanças e a distância entre as strings.
intagg Fornece um agregador inteiro e um enumerador. O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.1.
intarray Fornece um conjunto de funções e operadores para manipulação de matrizes null-free de números inteiros e busca indexada. O Cloud SQL para PostgreSQL 9.6, 11 e 12 usam a versão 1.2. O PostgreSQL 13 usa a versão 1.3.
pageinspect Inspeciona o conteúdo das páginas do banco de dados em um nível baixo. Consulte também a seção pageinspect abaixo.
pgaudit Coleta dados de auditoria. O Cloud SQL para PostgreSQL 9.6 usa a versão 1.1.3 do pgaudit. O PostgreSQL 10 usa a versão 1.2.3. O PostgreSQL 11 usa a versão 1.3.2. O PostgreSQL 12 usa a versão 1.4.1. Para informações sobre como usar essa extensão com o Cloud SQL, consulte Como fazer auditoria para o PostgreSQL usando pgAudit.
pg_buffercache Fornece um meio para examinar o que está acontecendo no cache de buffer compartilhado em tempo real. O Cloud SQL para PostgreSQL 9.6 usa a versão 1.2. As versões 10, 11, 12 e 13 do PostgreSQL usam a versão 1.3.
pgcrypto Fornece funções criptográficas para o PostgreSQL. O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.3.
pglogical (link em inglês) Fornece replicação lógica para o PostgreSQL. Consulte Como configurar a replicação lógica.
pgfincore Um conjunto de funções para gerenciar páginas na memória do cache de disco do sistema operacional pelo PostgreSQL. Consulte também a seção pgfincore abaixo.
pg_freespacemap Examine o mapa de espaço livre (FSM, na sigla em inglês). Consulte também a seção pg_freespacemap abaixo.
pg_partman Permite criar e gerenciar conjuntos de partição de tabela baseados em tempo e em série. A versão 4.4.0 é compatível. Consulte também a seção pg_partman abaixo.
pg_prewarm Fornece uma maneira conveniente de carregar dados relacionais no cache de buffer do sistema operacional ou no cache de buffer do PostgreSQL. O Cloud SQL para PostgreSQL 9.6 usa a versão 1.1. As versões 10, 11, 12 e 13 do PostgreSQL usam a versão 1.2.
pg_repack Permite remover o inchaço de tabelas e índices. Opcionalmente, permite executar um CLUSTER on-line (ordenar tabelas por índice de cluster). O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.4.6 do pg_repack. Consulte também a seção pg_repack abaixo.
pgrowlocks Fornece informações de bloqueio de linha para a tabela especificada. O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.2.
pgstattuple Fornece várias funções para estatísticas de nível de tupla.
Não compatível no Cloud SQL para Cloud SQL para PostgreSQL 9.6.
pg_similarity Oferece suporte a consultas de similaridade no PostgreSQL.
pg_stat_statements Oferece um meio para rastrear as estatísticas de execução de todas as instruções SQL executadas. O Cloud SQL para PostgreSQL 9.6 usa a versão 1.4. O PostgreSQL 10 e 11 usam a versão 1.6. O PostgreSQL 12 usa a 1.7. O PostgreSQL 13 usa a 1.8.
pgTAP Fornece um framework de teste de unidade para PostgreSQL, escrito em PL/pgSQL e PL/SQL. A versão 1.1.0 é compatível.
pg_trgm Fornece funções e operadores para determinar a semelhança de texto alfanumérico com base na correspondência trigrama, bem como classes de operadores de índice compatíveis com a busca rápida de strings semelhantes. O Cloud SQL para PostgreSQL 9.6 usa a versão 1.3. O PostgreSQL 11 e 12 usam a versão 1.4. O PostgreSQL 13 usa a 1.5.
pg_visibility Fornece uma maneira de examinar o mapa de visibilidade (VM, na sigla em inglês) e as informações de visibilidade de uma tabela no nível da página. Consulte também a seção pg_visibility abaixo.
PL/Proxy Gerenciador de linguagem processual que permite chamadas de procedimento remoto entre bancos de dados do PostgreSQL, com fragmentação opcional. O PL/Proxy versão 2.10.0 é compatível no Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13. Consulte também a seção PL/Proxy abaixo.
postgres_fdw Permite que wrappers de dados externos sejam criados em instâncias ou entre instâncias. Consulte também a seção postgres_fdw abaixo.
sslinfo Fornece informações sobre o certificado SSL que o cliente atual forneceu quando se conectou à instância. O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.2.
tablefunc Inclui várias funções que retornam tabelas (várias linhas).
O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.
tsm_system_rows Fornece o método de amostragem de tabela SYSTEM_ROWS, que pode ser usado na cláusula TABLESAMPLE de um comando SELECT. O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.
tsm_system_time Fornece o método de amostragem de tabela SYSTEM_TIME, que pode ser usado na cláusula TABLESAMPLE de um comando SELECT. O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.
unaccent Um dicionário de pesquisa de texto que exclui acentos (sinais diacríticos) de lexemas. O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.1.
uuid-ossp Fornece funções para gerar identificadores universalmente únicos (UUIDs, na sigla em inglês) usando um dos inúmeros algoritmos padrão. O Cloud SQL para PostgreSQL 9.6, 10, 11, 12 e 13 usam a versão 1.1.

Mais sobre algumas extensões do PostgreSQL

Esta seção descreve mais informações sobre algumas das extensões do PostgreSQL compatíveis na tabela acima.

Em uma sessão de banco de dados, use essa extensão para se conectar a bancos de dados PostgreSQL e executar consultas.

Atualmente, essa extensão funciona para duas instâncias de IP privado do Cloud SQL na mesma rede VPC ou para bancos de dados cruzados na mesma instância.

Para mais informações, consulte a documentação.

Para se conectar a bancos de dados ou para se conectar à mesma instância de outro usuário, é necessário especificar uma senha. Por exemplo, mas não para fins de produção, veja um snippet de código:


  SELECT * FROM dblink (
    'dbname=name port=1234 host=host user=user password=password',
    'select id, name from table' \
  ) AS t(id int, name text);

Como alternativa, para configurar apenas uma conexão, este é um exemplo de snippet de código (não para fins de produção):

  SELECT dblink_connect('dbname=dblinktest user=postgres host=name_or_ip password=xxx');

Para se conectar à mesma instância do mesmo usuário, é possível se conectar sem uma senha. Exemplo:

  1. Defina a seguinte sinalização de banco de dados para ativar conexões locais sem uma senha
    cloudsql.allow_passwordless_local_connections

  2. Conectar sem especificar um host, o que implica a conexão com a mesma instância. Exemplo:

    SELECT *
      FROM dblink('dbname=finance user=alice',
                  'select income from revenue')
        AS revenue(income integer);
    

    O resultado pode ser semelhante ao seguinte:

          income
          --------
          1000
          (1 row)
    

Para se conectar a outros bancos de dados na mesma instância, não é possível definir o host como localhost ou 127.0.0.1. Em vez disso, você precisa usar o endereço IP mostrado para sua instância no Console do Google Cloud.

Veja também postgres_fdw e PL/Proxy.

pageinspect

Essa extensão inspeciona o conteúdo das páginas do banco de dados em um nível baixo. Consulte a documentação para detalhes específicos da versão.

pgfincore

Essa extensão contém funções para gerenciar páginas na memória de cache de disco do sistema operacional do PostgreSQL. Consulte a documentação para detalhes específicos da versão.

pg_freespacemap

Esta extensão examina o mapa de espaço livre (FSM, na sigla em inglês). Consulte a documentação para detalhes específicos da versão.

pg_partman

Essa extensão permite criar e gerenciar conjuntos de partição de tabela baseados em tempo e em série. A versão 4.4.0 é compatível.

No Cloud SQL, essa extensão não inclui o worker em segundo plano para manutenção automática de partições. Em vez disso, é possível usar, por exemplo, o Cloud Scheduler para orientar a manutenção chamando funções de manutenção em um intervalo regular.

pg_repack

Essa extensão permite remover inchaço de tabelas e índices. Como opção, essa extensão pode ser usada para executar um CLUSTER on-line (ordenar tabelas por índice de cluster). Os detalhes específicos da versão estão na documentação. Além disso, para usar essa extensão no Cloud SQL, é necessário um procedimento especial para adicionar privilégios a um usuário.

Conforme descrito acima, quando você cria uma nova instância do PostgreSQL, o usuário postgres padrão é criado para você (mas é necessário definir a senha). O usuário postgres padrão faz parte do papel cloudsqlsuperuser. Se um usuário fora de cloudsqlsuperuser quiser usar uma extensão, adicione os privilégios. O exemplo a seguir usa o comando grant para adicionar os privilégios necessários.

Exemplo de adição de privilégios

Para fins de exemplo abaixo, csuper1 é um cloudsqlsuperuser e testdb é um banco de dados de propriedade de testuser. Para criar a extensão pg_repack no testdb, inicialmente execute os seguintes comandos:

  1. Conecte-se a testdb como cloudsqlsuperuser:

    psql -U csuper1 -d testdb;
    
  2. Conceda ao proprietário do banco de dados, que é testuser, para csuper1:

    GRANT testuser TO csuper1;
    
  3. Crie a extensão:

    CREATE EXTENSION pg_repack;
    
  4. Revogue a concessão realizada na Etapa 2:

     REVOKE testuser FROM csuper1;
    
  5. Execute o comando pg_repack em uma tabela, como t1 em testdb, como csuper1:

    pg_repack -h <hostname> -d testdb -U csuper1 -k -t t1
    

O comando pg_repack pode falhar com o seguinte erro:
"ERROR: query failed: SSL SYSCALL error: EOF detected"

Se esse erro ocorrer, defina os sinais de atividade TCP para um valor menor e execute o comando pg_repack. Para mais informações, consulte Conexões do Compute Engine.

pg_visibility

Essa extensão fornece uma maneira de examinar o mapa de visibilidade (VM) e as informações de visibilidade no nível da página de uma tabela. Consulte a documentação para detalhes específicos da versão.

PL/Proxy

Essa extensão é um gerenciador de linguagem processual que permite chamadas de procedimento remoto entre bancos de dados do PostgreSQL, com fragmentação opcional.

Consulte a documentação para detalhes específicos da versão.

As instâncias de destino para conexões precisam estar na mesma rede VPC que a instância de conexão. Além disso, não é possível escolher, no Console do Google Cloud, o botão Permitir apenas conexões SSL para instâncias de cluster.

Para se conectar a outros bancos de dados na mesma instância, não é possível definir o host como localhost ou 127.0.0.1. Em vez disso, você precisa usar o endereço IP mostrado para sua instância no Console do Google Cloud.

Consulte também postgres_fdw e dblink.

postgres_fdw

Essa extensão permite que tabelas de outros bancos de dados PostgreSQL ("estrangeiros") sejam expostas como tabelas "estrangeiras" no banco de dados atual. Essas tabelas estão disponíveis para uso, quase como se fossem tabelas locais. Consulte a documentação para detalhes específicos da versão.

Atualmente, essa extensão funciona para duas instâncias de IP privado do Cloud SQL na mesma rede VPC ou para bancos de dados cruzados na mesma instância.

Para se conectar a outros bancos de dados na mesma instância, não é possível definir o host como localhost ou 127.0.0.1. Em vez disso, você precisa usar o endereço IP mostrado para sua instância no Console do Google Cloud.

Além disso, não é possível escolher, no Console do Google Cloud, o botão Permitir apenas conexões SSL para uma instância em que dados externos são armazenados. Somente cloudsqlsuperuser pode ser o proprietário de um wrapper de dados estrangeiro postgres_fdw.

Veja também PL/Proxy e dblink.

postgresql-hll

Essa extensão introduz um novo tipo de dados, hll, que é uma estrutura de dados do HyperLogLog. Consulte a documentação para detalhes específicos da versão.