public inbox for pgsql-novice@postgresql.org
help / color / mirror / Atom feedFrom: Subramanian,Ramachandran <ramachandran.subramanian@alte-leipziger.de>
To: pgsql-novice@lists.postgresql.org <pgsql-novice@lists.postgresql.org>
Subject: Trying to understand Tuple Header
Date: Sun, 3 May 2026 18:44:53 +0000
Message-ID: <0f8e5544ae8a412bb637fcc3d15f8aaa@alte-leipziger.de> (raw)
Hello,
I created a table called One_Page_Wonder and inserted 3 rows in it. I updated row 2 and row 3 . I looked at the tuples.
Row 1 is pristine, Row 2 and 3 have t_xmin and t_xmax values to show the updates and older version of the tuples. So far no confusion.
Then I truncated the table and inserted 1st row and comitted it and inserted 4th row and rolled it back.
The tuple for 4th row that I rolled back looks identical to the 1st row that I commited !!!!
If I did not do a SELECT on One_Page_Wonder and just looked at the raw page, I would have concluded that both the tuples are valid and active and comitted.
How does postgres know that this 4th tuple has been rolled back ? Please help me learn that.
Regards
Ram
SELECT * FROM heap_page_items(get_raw_page('One_Page_Wonder',0));
lp | lp_off | lp_flags | lp_len | t_xmin | t_xmax | t_field3 | t_ctid | t_infomask2 | t_infomask | t_hoff | t_bits | t_oid | t_data
----+--------+----------+--------+--------+--------+----------+--------+-------------+------------+--------+--------+-------+--------------------------------------------------------------------
1 | 8136 | 1 | 56 | 3561 | 0 | 0 | (0,1) | 3 | 2050 | 24 | | | \x0100000027466972737420726f7720496e736572746564008abd6087eef30200
2 | 8080 | 1 | 56 | 3562 | 3565 | 0 | (0,5) | 16387 | 258 | 24 | | | \x02000000275365636f6e6420726f77496e736572746564000fc66087eef30200
3 | 8024 | 1 | 56 | 3563 | 3564 | 0 | (0,4) | 16387 | 258 | 24 | | | \x030000002754686972642020726f77496e73657274656400cecb6087eef30200
4 | 7968 | 1 | 56 | 3564 | 0 | 0 | (0,4) | 32771 | 10242 | 24 | | | \x0300000021557064617465645f3372645f726f7700000000cecb6087eef30200
5 | 7912 | 1 | 56 | 3565 | 0 | 0 | (0,5) | 32771 | 10242 | 24 | | | \x0200000021557064617465645f3272645f726f77000000000fc66087eef30200
(5 rows)
SELECT * FROM One_Page_Wonder ;
id | text | time_stamp
----+--------------------+----------------------------
1 | First row Inserted | 2026-05-03 20:35:52.451466
3 | Updated_3rd_row | 2026-05-03 20:35:52.455118
2 | Updated_2rd_row | 2026-05-03 20:35:52.453647
(3 rows)
TRUNCATE TABLE One_Page_Wonder;
TRUNCATE TABLE
INSERT INTO One_Page_Wonder
(Id,Text)
VALUES
(1, 'First row Inserted');
INSERT 0 1
BEGIN;
BEGIN
SELECT pg_current_xact_id();
pg_current_xact_id
--------------------
3568
(1 row)
INSERT INTO One_Page_Wonder
(Id,Text)
VALUES
(4, 'Fourth rowInserted');
INSERT 0 1
ROLLBACK;
ROLLBACK
SELECT * FROM heap_page_items(get_raw_page('One_Page_Wonder',0));
lp | lp_off | lp_flags | lp_len | t_xmin | t_xmax | t_field3 | t_ctid | t_infomask2 | t_infomask | t_hoff | t_bits | t_oid | t_data
----+--------+----------+--------+--------+--------+----------+--------+-------------+------------+--------+--------+-------+--------------------------------------------------------------------
1 | 8136 | 1 | 56 | 3567 | 0 | 0 | (0,1) | 3 | 2050 | 24 | | | \x0100000027466972737420726f7720496e7365727465640091026187eef30200
2 | 8080 | 1 | 56 | 3568 | 0 | 0 | (0,2) | 3 | 2050 | 24 | | | \x0400000029466f757274682020726f77496e736572746564f4076187eef30200
(2 rows)
SELECT * FROM One_Page_Wonder ;
id | text | time_stamp
----+--------------------+----------------------------
1 | First row Inserted | 2026-05-03 20:35:52.469137
(1 row)
DROP TABLE One_Page_Wonder;
DROP TABLE
DROP EXTENSION pageinspect;
DROP EXTENSION
Freundliche Grüße
i. A. Ramachandran Subramanian
Zentralbereich Informationstechnologie
Alte Leipziger Lebensversicherung a.G.
Hallesche Krankenversicherung a.G.
Alte Leipziger Lebensversicherung a.G., Alte Leipziger-Platz 1, 61440 Oberursel
Vors. des Aufsichtsrats: Dr. Walter Botermann · Vorstand: Christoph Bohn (Vors.), Dr. Jürgen Bierbaum (stv. Vors.), Frank Kettnaker, Dr. Jochen Kriegmeier, Alexander Mayer, Christian Pape, Wiltrud Pekarek, Udo Wilcsek
Sitz Oberursel (Taunus) · Rechtsform VVaG · Amtsgericht Bad Homburg v. d. H. HRB 1583 · USt.-IdNr. DE 114106814
Hallesche Krankenversicherung a.G., Löffelstraße 34-38, 70597 Stuttgart
Vors. des Aufsichtsrats: Dr. Walter Botermann · Vorstand: Christoph Bohn (Vors.), Dr. Jürgen Bierbaum (stv. Vors.), Frank Kettnaker, Dr. Jochen Kriegmeier, Alexander Mayer, Christian Pape,
Wiltrud Pekarek, Udo Wilcsek
Sitz Stuttgart · Rechtsform VVaG · Amtsgericht Stuttgart HRB 2686 · USt.-IdNr. DE 147802285
Beiträge zu privaten Kranken- und Pflegekrankenversicherungen unterliegen nicht der Versicherungsteuer (§ 4 Nr. 5 VersStG) · Versicherungsleistungen sowie Umsätze aus Versicherungsvertreter-/Maklertätigkeiten sind umsatzsteuerfrei
Die Pflichtangaben der ALH Gruppe gemäß § 35a GmbHG bzw. § 80 AktG finden Sie hier: https://www.alte-leipziger.de/impressum
______________________
ALH Gruppe
Alte Leipziger-Platz 1, 61440 Oberursel
Tel.: +49 (6171) 66-4882
Fax: +49 (6171) 66-800-4882
E-Mail: ramachandran.subramanian@alte-leipziger.de
www.alte-leipziger.de
www.hallesche.de
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-novice@postgresql.org
Cc: ramachandran.subramanian@alte-leipziger.de, pgsql-novice@lists.postgresql.org
Subject: Re: Trying to understand Tuple Header
In-Reply-To: <0f8e5544ae8a412bb637fcc3d15f8aaa@alte-leipziger.de>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox