• An interactive TUI for reading PostgreSQL WAL (pg_walview)

    A while ago I wrote pg_walview, a TUI for reading PostgreSQL WAL (Write-Ahead Log) files. It does not print everything at once the way pg_waldump does, and instead lets you move a cursor through the records one at a time in your terminal, which is the whole point of it. It is written in Rust.

    Read more →

  • PostgreSQL 18 supports UUIDv7

    UUIDv7 was defined in RFC 9562. There are eight versions of UUID, and while they all have a size of 128 bits, the data stored in each version is different. Until I learned about UUIDv7, when I thought of UUIDs, I imagined random data - but that’s version 4 UUID. The version 7 UUID (UUIDv7) has a significant feature: sortability thanks to a timestamp stored at the beginning of the data.

    Read more →

  • Building PostgreSQL with musl libc

    The well-known implementation of the standard C library is glibc. musl libc is another implementation of the standard C library. It uses the MIT License, and it is known for its simple implementation and small binary size. It is also used in Alpine Linux.

    Read more →

  • Implementing a new PostgreSQL Table AM for archiving tables

    I recently published my hobby project pgroad, a new PostgreSQL Table Access Method (Table AM). pgroad is a PostgreSQL extension that adds a new table format called road to PostgreSQL. ROAD stands for “Read Only Archived Data” and is used to convert existing tables that are accessed infrequently but cannot be dropped into compact, read-only tables.

    Read more →

  • Burning PostgreSQL transaction IDs.

    PostgreSQL’s transaction ID (hereafter XID) is internally represendted as a “monotoronicaly increasing 32-bit unsigned integer value”, so after reaching 2^32-1 (approximately 4 billion) it wraps around back to 0. In PostgreSQL, each transaction that modifies the database such as INSERT, UPDATE and even DDLs is assigned a unique XID. Since the order of XIDs is used to check the visibility of tuples in tables, if XID wraps around after reaching the upper limit, this logic would break.

    Read more →