PostgreSQL's caching system was designed in the early days of the database, when network speeds were slower than hard drives, hard drives were slower than memory, and memory was slower than CPU. The basic idea was to keep frequently used data in memory to speed up retrieval. This improvement has proven far more effective and valuable over time. However, as PostgreSQL matured, the shared memory system also matured, and caching became less accurate due to other factors becoming prominent. The system follows a simple paradigm of locking or latching, with two types of pins for reading or writing to memory. It uses a page and leaf descriptor system to manage table data on disk, allowing for efficient lookup in memory. The system is tightly integrated into the PostgreSQL query planner and acts as both a cache for frequently accessed data and a change buffer for data modifying queries. Caching has its limitations, including cache eviction, which can lead to performance issues if not managed properly. Despite these challenges, caching remains an essential component of PostgreSQL's design principles, and future articles will explore its caveats and improvements.