Todos os produtos
Search
Central de documentação

PolarDB:Decoderbufs (decode to ProtoBuf)

Última atualização: Jun 28, 2026

O decoderbufs é um plugin de saída de decodificador lógico do PostgreSQL que serializa eventos de alteração do WAL no formato Protocol Buffers (protobuf) para replicação lógica.

Pré-requisitos

Antes de começar, verifique se você tem:

  • PolarDB for PostgreSQL (Compatible with Oracle) — compatibilidade com sintaxe Oracle 2.0, versão secundária do mecanismo 2.0.14.1.0 ou posterior. Para verificar a versão, execute SHOW polardb_version; no console ou visualize a versão secundária do mecanismo. Se a versão não atender ao requisito, atualize a versão secundária do mecanismo.

  • As seguintes bibliotecas instaladas e disponíveis no cluster PostgreSQL:

    Biblioteca

    Versão mínima

    Finalidade

    PostgreSQL

    9,6

    Mecanismo principal

    Protobuf-c

    1,2

    Serialização de dados

    PostGIS

    2.1

    Suporte a tipos de dados espaciais e geográficos

Configure o cluster

O decoderbufs é carregado automaticamente; portanto, não é necessário carregar a extensão manualmente. A única alteração de configuração necessária é definir wal_level como logical, o que adiciona as informações necessárias para decodificação lógica ao write-ahead log (WAL).

Para defina wal_level:

  1. No console, acesse a página de parâmetros do cluster. Para obter instruções, consulte Definir parâmetros do cluster.

  2. Defina wal_level como logical.

Importante

A alteração de wal_level reinicia o cluster. Programe essa mudança durante uma janela de manutenção.

Usar o decoderbufs para replicação lógica

O exemplo a seguir demonstra a criação de um slot de replicação, a leitura de alterações do WAL em modo de depuração, o consumo dessas alterações e a verificação da posição do slot.

Todas as etapas utilizam funções SQL da família pg_logical_slot_*. O nome do slot decoderbufs_demo é usado em todo o documento para manter a consistência.

Etapa 1: Crie um slot de replicação

SELECT * FROM pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs');

Este comando cria um slot de replicação lógica chamado decoderbufs_demo e define o decoderbufs como plugin de saída.

Etapa 2: Modifique uma tabela no publicador

No lado do publicador, insira, atualize ou exclua linhas em uma tabela publicada. Essa ação gera registros WAL que o decoderbufs decodifica.

Etapa 3: Visualize alterações do WAL (sem consumo)

SELECT data FROM pg_logical_slot_peek_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');

A função pg_logical_slot_peek_changes retorna alterações decodificadas do WAL sem avançar a posição do slot. No modo de depuração ('debug-mode', '1'), a saída é uma representação de texto protobuf legível por humanos. Como a posição do slot permanece inalterada, você pode chamar essa função repetidamente para inspecionar as mesmas alterações.

Etapa 4: Consumir alterações do WAL

SELECT data FROM pg_logical_slot_get_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');

A função pg_logical_slot_get_changes retorna a mesma saída decodificada que peek, mas também avança a posição WAL do slot. Após essa chamada, as alterações consumidas não são mais retornadas em chamadas subsequentes.

Etapa 5: Verifique a posição do slot

SELECT * FROM pg_replication_slots WHERE slot_type = 'logical';

Verifique a coluna confirmed_flush_lsn para confirme se o slot avançou após o consumo das alterações.

Mapeamento de tipos

O decoderbufs mapeia os OIDs de tipos internos do PostgreSQL para tipos de campo protobuf. A tabela abaixo está organizada por categoria de dados.

Tipos numéricos

Tipo PostgreSQL

Campo Decoderbufs

BOOLOID

datum_boolean

INT2OID

datum_int32

INT4OID

datum_int32

INT8OID

datum_int64

OIDOID

datum_int64

FLOAT4OID

datum_float

FLOAT8OID

datum_double

NUMERICOID

datum_double

Tipos de string e texto

Tipo PostgreSQL

Campo Decoderbufs

CHAROID

datum_string

VARCHAROID

datum_string

BPCHAROID

datum_string

TEXTOID

datum_string

JSONOID

datum_string

XMLOID

datum_string

UUIDOID

datum_string

Tipos temporais

Tipo PostgreSQL

Campo Decoderbufs

TIMESTAMPOID

datum_string

TIMESTAMPTZOID

datum_string

Tipos binários

Tipo PostgreSQL

Campo Decoderbufs

BYTEAOID

datum_bytes

Tipos espaciais

Tipo PostgreSQL

Campo Decoderbufs

POINTOID

datum_point

PostGIS geometry

datum_point

PostGIS geography

datum_point

Próximos passos