---------------------------------------------------------------------
select pg_current_wal_insert_lsn(); --yield C/2F3533D8
begin;
select pg_current_wal_insert_lsn(); --yield C/2F3533D8
update wal set id = id + 1;
select pg_current_wal_insert_lsn(); --yield C/2F3534D8
commit ;
select pg_current_wal_insert_lsn(); --yield C/2F353500
select 'C/2F353500'::pg_lsn - 'C/2F3533D8'::pg_lsn; --yield 296
select file_name, upper(to_hex(file_offset)) file_offset from pg_walfile_name_offset('C/2F3533D8');
/*
file_name | file_offset
--------------------------+-------------
000000010000000C0000002F | 3533D8
*/
select * from pg_ls_waldir() where name = '000000010000000C0000002F';
/* returning with the previous command.
name | size | modification
--------------------------+----------+---------------------------
000000010000000C0000002F | 16777216 | 2022-03-11 12:20:13+05:30
*/
然后在终端中运行。
/usr/lib/postgresql/14/bin/pg_waldump -p /var/lib/postgresql/14/main/pg_wal -s C/2F3533D8 -e C/2F353500#
返回
rmgr: Heap len (rec/tot): 65/ 197, tx: 1506, lsn: C/2F3533D8, prev C/2F3533A0, desc: HOT_UPDATE off 2 xmax 1506 flags 0x00 ; new off 3 xmax 0, blkref #0: rel 1663/24598/41820 blk 0 FPW
rmgr: Standby len (rec/tot): 54/ 54, tx: 0, lsn: C/2F3534A0, prev C/2F3533D8, desc: RUNNING_XACTS nextXid 1507 latestCompletedXid 1505 oldestRunningXid 1506; 1 xacts: 1506
rmgr: Transaction len (rec/tot): 34/ 34, tx: 1506, lsn: C/2F3534D8, prev C/2F3534A0, desc: COMMIT 2022-03-11 12:20:03.642221 IST
--有3条记录,与书不同(https://prnt.sc/-OC1lF6kUxXM)。然后我想知道第二张唱片是做什么的?
rmgr: Standby ... desc: RUNNING_XACTS nextXid
该 WAL 记录与您的交易无关。它是在检查点的过程中编写的。
如果
wal_level
是replica
或更高,则包含当前快照(所有活动事务和锁)的详细信息的此记录将ACCESS EXCLUSIVE
写入 WAL。此信息是必要的,以便备用数据库上的查询知道他们可以看到什么。