mirror of
https://github.com/neondatabase/neon.git
synced 2025-12-27 16:12:56 +00:00
Seems handy for getting a quick idea of what's stored in an
image or delta layer file.
Example output on a file after runnnig pgbench for a while:
% ./target/debug/dump_layerfile pgbench_layers/pg_control_checkpoint_0_00000000016B914A
----- image layer for checkpoint.0 at 0/16B914A ----
non-blocky (88 bytes)
% ./target/debug/dump_layerfile pgbench_layers/pg_xact_0000_0_000000000412FD40
----- image layer for pg_xact/0000.0 at 0/412FD40 ----
(1) blocks
% ./target/debug/dump_layerfile pgbench_layers/rel_1663_14236_1247_0_0_00000000016B914A_000000000412FD40 | head -n 20
----- delta layer for 1663/14236/1247.0 0/16B914A-0/412FD40 ----
--- relsizes ---
0/16B914A: 14
0/16CA559: 15
--- page versions ---
blk 13 at 0/16BB1D2: rec 8162 bytes will_init: true HEAP INSERT
blk 14 at 0/16CA559: rec 8241 bytes will_init: true XLOG FPI
blk 14 at 0/16CA637: rec 215 bytes will_init: true HEAP INSERT
blk 14 at 0/16DF14F: rec 215 bytes will_init: false HEAP INSERT
blk 14 at 0/16DF3A7: rec 215 bytes will_init: false HEAP INSERT
blk 14 at 0/16E0637: rec 215 bytes will_init: false HEAP INSERT
blk 14 at 0/16E088F: rec 215 bytes will_init: false HEAP INSERT
blk 14 at 0/16E5F9F: rec 215 bytes will_init: false HEAP INSERT
blk 14 at 0/16E620F: rec 215 bytes will_init: false HEAP INSERT
This module contains utilities for working with PostgreSQL file formats. It's a collection of structs that are auto-generated from the PostgreSQL header files using bindgen, and Rust functions to read and manipulate them. There are also a bunch of constants in `pg_constants.rs` that are copied from various PostgreSQL headers, rather than auto-generated. They mostly should be auto-generated too, but that's a TODO. The PostgreSQL on-disk file format is not portable across different CPU architectures and operating systems. It is also subject to change in each major PostgreSQL version. Currently, this module is based on PostgreSQL v14, but in the future we will probably need a separate copy for each PostgreSQL version. TODO: Currently, there is also some code that deals with WAL records in pageserver/src/waldecoder.rs. That should be moved into this module. The rest of the codebase should not have intimate knowledge of PostgreSQL file formats or WAL layout, that knowledge should be encapsulated in this module.