Estou aprendendo como o WAL funciona no postgresql, mas realmente não entendo como o valor len(record) é obtido e onde posso encontrar o registro.
Para testes, fiz essas inserções:
INSERT INTO int_table (field1, field2, field3, field4, field5) VALUES (1, 1, 1, 1, 1);
INSERT INTO int_table (field1, field2, field3, field4) VALUES (1, 1, 1, 1);
INSERT INTO int_table (field1, field2, field3) VALUES (1, 1, 1);
Depois, com a ajuda de pg_waldump.exe, consegui o dump do wal:
rmgr: Heap len (rec/tot): 79/ 79, ...
rmgr: Heap len (rec/tot): 75/ 75, ...
rmgr: Heap len (rec/tot): 71/ 71, ...
Então, posso ver que a diferença entre os registros é de 4 bytes (um valor int). Porém, estou curioso sobre as informações contidas nos outros bytes. Por exemplo, o último registro possui 59 bytes de informações adicionais, juntamente com 4 + 4 + 4 bytes para três valores (1, 1, 1).
Então, minha pergunta é onde e por que esses 59 bytes estão escritos.
São dados de cabeçalho com informações como tablespace, banco de dados, arquivo, bloco/página e deslocamento em que a alteração deve ser aplicada.
É difícil ver o que você espera realizar aqui que não envolva a leitura do código-fonte, então por que não ler o código-fonte para descobrir quais são os campos?