{
  "status": "shipping",
  "advantages": [],
  "limitations": [],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-10-21",
  "slug": "postgresql-visibility-map",
  "term": "Visibility map (PostgreSQL)",
  "aliases": [
    "PostgreSQL visibility map"
  ],
  "definition": "A PostgreSQL visibility map records all-visible and all-frozen status for each heap page in a separate relation fork.",
  "note": "The all-visible bit supports skipping heap visibility checks during index-only scans. The all-frozen bit records that the page needs no further freezing until it changes. Indexes do not have their own visibility maps. [vm] [pgvisibility]\n\nThe map is conservative: a clear bit does not establish that the corresponding property is false. Ordinary data changes clear map bits, and vacuum establishes them. A tuple-header hint bit and the heap page's PD_ALL_VISIBLE flag are separate metadata, not alternative names for the map. [vm] [pgvisibility]\n\npg_visibility_map_summary counts marked pages from the map; it is not a comparison against every stored payload. Functions inspecting PD_ALL_VISIBLE also read heap pages. Choosing an inspection function therefore changes read coverage. Visibility metadata does not certify content integrity. [pgvisibility]",
  "related": [
    "postgresql-index-only-scan",
    "hint-bit",
    "postgresql-toast",
    "checksum"
  ],
  "citations": [
    {
      "id": "vm",
      "title": "PostgreSQL 16: Visibility Map",
      "url": "https://www.postgresql.org/docs/16/storage-vm.html",
      "accessed": "2026-10-21"
    },
    {
      "id": "pgvisibility",
      "title": "PostgreSQL 16: pg_visibility functions and page-level visibility",
      "url": "https://www.postgresql.org/docs/16/pgvisibility.html",
      "accessed": "2026-10-21"
    }
  ],
  "provenance": [
    "Describes PostgreSQL 16 visibility metadata. A count of marked pages is distinct from validation of the map or expected application content."
  ]
}
