O decoderbufs é um plugin de saída para o decodificador lógico do PostgreSQL que converte dados no formato Protocol Buffers para replicação lógica.
Aplicabilidade
-
As seguintes versões do PolarDB for PostgreSQL são compatíveis:
PostgreSQL 17 (versão secundária do mecanismo 2.0.17.6.4.0 ou posterior)
PostgreSQL 16 (versão secundária do mecanismo 2.0.16.9.9.0 ou posterior)
PostgreSQL 15 (versão secundária do mecanismo 2.0.15.14.6.0 ou posterior)
PostgreSQL 14 (versão secundária do mecanismo 2.0.14.5.1.0 ou posterior)
PostgreSQL 11 (versão secundária do mecanismo 2.0.11.9.28.0 ou posterior)
NotaVisualize a versão secundária do mecanismo no console ou execute a instrução
SHOW polardb_version;. Se a versão não atender aos requisitos, upgrade the minor engine version. -
A extensão decoderbufs depende das seguintes bibliotecas:
PostgreSQL: versão do mecanismo 9,6 ou posterior.
Protobuf-c: versão 1,2 ou posterior, para serialização de dados.
PostGIS: versão 2,1 ou posterior, para oferecer suporte a tipos geoespaciais do PostgreSQL.
Instruções de uso
Por padrão, o sistema carrega a extensão decoderbufs automaticamente, eliminando a necessidade de carregamento manual. Defina o parâmetro wal_level como logical. Essa configuração adiciona ao write-ahead logging (WAL) as informações necessárias para a decodificação lógica.
Defina o parâmetro wal_level no console. Para mais informações, consulte Set cluster parameters. A alteração desse parâmetro reinicia o cluster; portanto, proceda com cautela e planeje adequadamente suas operações comerciais.
O exemplo a seguir demonstra como realizar a replicação lógica:
-
Crie um slot de replicação lógica e configure o plugin de decodificação como decoderbufs.
SELECT * FROM pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs'); Na instância publicadora, modifique a tabela alvo da replicação.
-
Use o modo de depuração do decoderbufs para visualizar o log WAL.
SELECT data FROM pg_logical_slot_peek_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1'); -
Use o decoderbufs para recuperar alterações do WAL e atualizar a posição do WAL.
SELECT data FROM pg_logical_slot_get_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1'); -
Verifique a posição WAL da replicação lógica.
SELECT * FROM pg_replication_slots WHERE slot_type = 'logical';
Mapeamento de tipos
A tabela a seguir descreve o mapeamento entre os tipos do PostgreSQL e os campos do decoderbufs.
|
Tipo PostgreSQL |
Campo Decoderbuf |
|
BOOLOID |
datum_boolean |
|
INT2OID |
datum_int32 |
|
INT4OID |
datum_int32 |
|
INT8OID |
datum_int64 |
|
OIDOID |
datum_int64 |
|
FLOAT4OID |
datum_float |
|
FLOAT8OID |
datum_double |
|
NUMERICOID |
datum_double |
|
CHAROID |
datum_string |
|
VARCHAROID |
datum_string |
|
BPCHAROID |
datum_string |
|
TEXTOID |
datum_string |
|
JSONOID |
datum_string |
|
XMLOID |
datum_string |
|
UUIDOID |
datum_string |
|
TIMESTAMPOID |
datum_string |
|
TIMESTAMPTZOID |
datum_string |
|
BYTEAOID |
datum_bytes |
|
POINTOID |
datum_point |
|
PostGIS geometry |
datum_point |
|
PostGIS geography |
datum_point |