Go to file
Tom Lane de239d01e7 Consistently use PageGetExactFreeSpace() in pgstattuple.
Previously this code used PageGetHeapFreeSpace on heap pages,
and usually used PageGetFreeSpace on index pages (though for some
reason GetHashPageStats used PageGetExactFreeSpace instead).
The difference is that those functions subtract off the size of
a line pointer, and PageGetHeapFreeSpace has some additional
rules about returning zero if adding another line pointer would
require exceeding MaxHeapTuplesPerPage.  Those things make sense
when testing to see if a new tuple can be put on the page, but
they seem pretty strange for pure statistics collection.

Additionally, statapprox_heap had a special rule about counting
a "new" page as being fully available space.  This also seems
strange, because it's not actually usable until VACUUM or some
such process initializes the page.  Moreover, it's inconsistent
with what pgstat_heap does, which is to count such a page as
having zero free space.  So make it work like pgstat_heap, which
as of this patch unconditionally calls PageGetExactFreeSpace.

This is more of a definitional change than a bug fix, so no
back-patch.  The module's documentation doesn't define exactly
what "free space" means either, so we left that as-is.

Frédéric Yhuel, reviewed by Rafia Sabih and Andreas Karlsson.

Discussion: https://postgr.es/m/3a18f843-76f6-4a84-8cca-49537fefa15d@dalibo.com
2024-09-09 14:34:10 -04:00
.github Add CODE_OF_CONDUCT.md, CONTRIBUTING.md, and SECURITY.md. 2024-07-02 13:03:58 -05:00
config jit: Remove {llvm-config,clang}-N configure probes. 2024-05-16 13:58:25 +12:00
contrib Consistently use PageGetExactFreeSpace() in pgstattuple. 2024-09-09 14:34:10 -04:00
doc Don't bother checking the result of SPI_connect[_ext] anymore. 2024-09-09 12:18:34 -04:00
src Don't bother checking the result of SPI_connect[_ext] anymore. 2024-09-09 12:18:34 -04:00
.cirrus.star
.cirrus.tasks.yml Convert node test compile-time settings into run-time parameters 2024-08-01 10:09:18 +02:00
.cirrus.yml
.dir-locals.el
.editorconfig
.git-blame-ignore-revs Add 97add39c0 to .git-blame-ignore-revs. 2024-08-15 11:43:55 -04:00
.gitattributes
.gitignore
aclocal.m4
configure Remove support for OpenSSL older than 1.1.0 2024-09-02 13:51:48 +02:00
configure.ac Remove support for OpenSSL older than 1.1.0 2024-09-02 13:51:48 +02:00
COPYRIGHT
GNUmakefile.in
HISTORY
Makefile
meson_options.txt Remove spinlocks and atomics from meson_options.txt. 2024-07-30 23:37:14 +12:00
meson.build Remove support for OpenSSL older than 1.1.0 2024-09-02 13:51:48 +02:00
README.md

PostgreSQL Database Management System

This directory contains the source code distribution of the PostgreSQL database management system.

PostgreSQL is an advanced object-relational database management system that supports an extended subset of the SQL standard, including transactions, foreign keys, subqueries, triggers, user-defined types and functions. This distribution also contains C language bindings.

Copyright and license information can be found in the file COPYRIGHT.

General documentation about this version of PostgreSQL can be found at https://www.postgresql.org/docs/devel/. In particular, information about building PostgreSQL from the source code can be found at https://www.postgresql.org/docs/devel/installation.html.

The latest version of this software, and related software, may be obtained at https://www.postgresql.org/download/. For more information look at our web site located at https://www.postgresql.org/.