-
Notifications
You must be signed in to change notification settings - Fork 0
postgres strcut file
Stas edited this page Aug 31, 2025
·
4 revisions
Każdy rekord (krotka) na stronie ma nagłówek oraz dane. Oto co pokazuje Twoje zapytanie:
- 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ół”.
- Długość rekordu w bajtach.
- Tu: 54 bajty – cały rekord (nagłówek + dane kolumn).
- ID transakcji, która wstawiła ten rekord.
- 744 i 745 – dwie kolejne transakcje.
- ID transakcji, która usunęła rekord.
- 0 oznacza, że rekord nie został usunięty.
- Fizyczna lokalizacja rekordu: (block_number, tuple_index).
- (0,1) i (0,2) – rekordy są w pierwszym bloku (stronie) na pozycji 1 i 2.
- Zawierają flagi informujące o stanie krotki.
- Przechowują bitowe informacje o typach danych, wersjach, walidacjach, NULL-ach itd.
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.
Bitmapa NULL – jeśli któraś kolumna ma wartość NULL.
Tu: pusty, więc żadna kolumna nie ma NULL-a.
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
- 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ł). |
- Rozkodowane kolumny (z t_data) jako tablica bytea[].
U Ciebie:
{"\\x01000000", "\\x137465737475736572", "\\x2374657374406578616d706c652e636f6d"}
-
\x01000000– wartość pierwszej kolumny, np. OID (1) -
\x137465737475736572– testuser -
\x2374657374406578616d706c652e636f6d– test@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 |