We now enter the io_* neighborhood, the newest one in the GUC namespace: nothing here existed before PostgreSQL 17. If effective_io_concurrency answers “how many I/Os do we keep in flight?”, io_combine_limit answers the orthogonal question: “how big is each one?” Depth and width.
io_combine_limit arrived in PostgreSQL 17. The default is 128kB (16 blocks; unitless values are in BLCKSZ
IntervalStyle is DateStyle’s younger sibling, and it inherited the family trait: it looks like an output-formatting preference, but it also changes how PostgreSQL parses your input. We covered the date version of this trick in DateStyle. The interval version is less famous and, in one specific case, nastier.
Every connection anyone has made to a PostgreSQL server since 8.0 has opened with the server announcing, unprompted, the value of integer_datetimes. Since PostgreSQL 10, the value it announces is the only value a PostgreSQL server can be built with, and the current documentation disposes of the entire subject in one sentence: “As of PostgreSQL 10, this is always
in_hot_standby is a light, not a switch. It reports whether the server you are connected to is currently a hot standby: on when your session is riding a replica that is replaying WAL and taking read-only queries (the state hot_standby enables), off on a primary. It is a boolean, it arrived in PostgreSQL 14, and its context is none of
ignore_system_indexes completes a run of three consecutive parameters named ignore_-something, and it is by a comfortable margin the most polite of the family. ignore_checksum_failure and ignore_invalid_pages tell PostgreSQL to proceed past evidence of corruption; this one just tells it to stop trusting a set of access paths. It is a boolean, default off, and it lives in the
Nobody finds ignore_invalid_pages by reading the documentation front to back. You find it by pasting PANIC: WAL contains references to invalid pages into a search engine, generally at an hour when you would prefer to be asleep. It is a developer option, absent from postgresql.conf.sample, present since PostgreSQL 13. The default is off and the context is postmaster,
ignore_checksum_failure is not a configuration parameter so much as a crowbar in a glass case. It defaults to off, it does not appear in postgresql.conf.sample at all (the sample file politely declines to advertise it), and the documentation files it under Developer Options, next to the other tools you hope never to hold. The context is superuser, which
Jacob Jackson at ByteofDev built something I can only describe as admirably irresponsible (and something I wish I had thought of first): claudegres, a “PostgreSQL” in which Claude is the entire backend. Not Claude tuning the database, and not Claude writing queries against the database. Claude as the database: parsing SQL, planning queries, formatting result sets, and persisting heap
idle_session_timeout is housekeeping, not protection. Its sibling, idle_in_transaction_session_timeout, defends the database from actual harm: an idle transaction holds locks and pins the xmin horizon, and vacuum suffers for it. A session idle outside a transaction does none of that. It ties up a connection slot, a backend process, and some memory. That is the entire bill, and this parameter
idle_replication_slot_timeout shares an alphabetical neighborhood with idle_in_transaction_session_timeout and idle_session_timeout, but it solves the opposite problem. Those disconnect clients that stay too long. This one, new in PostgreSQL 18, deals with clients that stop showing up at all: it puts an expiration date on replication slots.
A replication slot is an open-ended promise. As long as the slot exists,