Skip to content

postgres strcut file

Stas edited this page Aug 31, 2025 · 4 revisions

OGÓLNY UKŁAD

Każdy rekord (krotka) na stronie ma nagłówek oraz dane. Oto co pokazuje Twoje zapytanie:

🔢 lp_off

  • Offset rekordu w bajtach od początku strony (czyli od 0).
  • 8136 i 8080 oznaczają, że rekordy są blisko końca strony (strona ma 8192 bajty).
  • Struktura jest „stackowana od końca” – rekordy rosną „w dół”.

📏 lp_len

  • Długość rekordu w bajtach.
  • Tu: 54 bajty – cały rekord (nagłówek + dane kolumn).

🔐 t_xmin

  • ID transakcji, która wstawiła ten rekord.
  • 744 i 745 – dwie kolejne transakcje.

❌ t_xmax

  • ID transakcji, która usunęła rekord.
  • 0 oznacza, że rekord nie został usunięty.

📍 t_ctid

  • Fizyczna lokalizacja rekordu: (block_number, tuple_index).
  • (0,1) i (0,2) – rekordy są w pierwszym bloku (stronie) na pozycji 1 i 2.

⚠️ t_infomask, t_infomask2

  • Zawierają flagi informujące o stanie krotki.
  • Przechowują bitowe informacje o typach danych, wersjach, walidacjach, NULL-ach itd.

t_hoff (Header offset)

Mówi, gdzie zaczynają się dane kolumn w strukturze rekordu (po nagłówku).

24 bajty – nagłówek rekordu ma 24 bajty, dane zaczynają się od 25. bajtu.

🧩 t_bits

Bitmapa NULL – jeśli któraś kolumna ma wartość NULL.

Tu: pusty, więc żadna kolumna nie ma NULL-a.

💾 t_data

Surowe dane kolumn zakodowane jako bytea (szesnastkowy ciąg bajtów).

W Twoim przypadku:

\x010000001374657374757365722374657374406578616d706c652e636f6d

Ten ciąg zawiera:

  • \x01 000000 → oid kolumny
  • \x13 7465737475736572 → string testuser
  • \x23 74657374406578616d706c652e636f6d → string test@example.com

flag_info

  • Czytelna interpretacja t_infomask + t_infomask2.
{HEAP_HASVARWIDTH, HEAP_XMIN_COMMITTED, HEAP_XMAX_INVALID}

Co oznaczają:

Flaga Znaczenie
HEAP_HASVARWIDTH Rekord zawiera kolumny o zmiennej długości (np. TEXT, VARCHAR).
HEAP_XMIN_COMMITTED Wstawiająca transakcja została zatwierdzona.
HEAP_XMAX_INVALID Rekord nie został usunięty (nikt go nie nadpisał/nie skasował).

columns

  • Rozkodowane kolumny (z t_data) jako tablica bytea[].

U Ciebie:

{"\\x01000000", "\\x137465737475736572", "\\x2374657374406578616d706c652e636f6d"}
  • \x01000000 – wartość pierwszej kolumny, np. OID (1)
  • \x137465737475736572 – testuser
  • \x2374657374406578616d706c652e636f6dtest@example.com
Pole Wartość Znaczenie
t_xmin 744 / 745 ID transakcji wstawiającej
t_xmax 0 Nieusunięty rekord
t_ctid (0,1) Pozycja w pliku binarnym (blok 0, slot 1)
t_infomask 2306 Flagi: dane o typach i stanie transakcji
t_hoff 24 Offset do danych kolumn
t_data HEX Surowe dane kolumn (w formacie binarnym)
columns bytea[] Wartości kolumn po rozbiciu

Clone this wiki locally