Teach nbtree multi-column index scans to opportunistically skip over
irrelevant sections of the index given a query with no "=" conditions on
one or more prefix index columns. When nbtree is passed input scan keys
derived from a predicate "WHERE b = 5", new nbtree preprocessing steps
output "WHERE a = ANY(<every possible 'a' value>) AND b = 5" scan keys.
That is, preprocessing generates a "skip array" (and an output scan key)
for the omitted prefix column "a", which makes it safe to mark the scan
key on "b" as required to continue the scan. The scan is therefore able
to repeatedly reposition itself by applying both the "a" and "b" keys.
A skip array has "elements" that are generated procedurally and on
demand, but otherwise works just like a regular ScalarArrayOp array.
Preprocessing can freely add a skip array before or after any input
ScalarArrayOp arrays. Index scans with a skip array decide when and
where to reposition the scan using the same approach as any other scan
with array keys. This design builds on the design for array advancement
and primitive scan scheduling added to Postgres 17 by commit
|
9 months ago | |
|---|---|---|
| .github | Add CODE_OF_CONDUCT.md, CONTRIBUTING.md, and SECURITY.md. | 2 years ago |
| config | Optimize popcount functions with ARM SVE intrinsics. | 9 months ago |
| contrib | Fix autoprewarm neglect of tablespaces | 9 months ago |
| doc | Add nbtree skip scan optimization. | 9 months ago |
| src | Add nbtree skip scan optimization. | 9 months ago |
| .cirrus.star | Remove duplicate words in docs and code comments. | 2 years ago |
| .cirrus.tasks.yml | aio: Add io_method=io_uring | 9 months ago |
| .cirrus.yml | ci: Test NetBSD and OpenBSD | 11 months ago |
| .dir-locals.el |
…
|
|
| .editorconfig | Add script to keep .editorconfig in sync with .gitattributes | 11 months ago |
| .git-blame-ignore-revs |
Add commit e1a8b1ad58 to .git-blame-ignore-revs.
|
9 months ago |
| .gitattributes | Add script to keep .editorconfig in sync with .gitattributes | 11 months ago |
| .gitignore | Update top-level .gitignore. | 3 years ago |
| .mailmap | Add a Git .mailmap file | 1 year ago |
| COPYRIGHT | Update copyright for 2025 | 12 months ago |
| GNUmakefile.in | Allow selecting the git revision to be packaged by "make dist". | 2 years ago |
| HISTORY |
…
|
|
| Makefile | Remove AIX support | 2 years ago |
| README.md | Revise the style of a paragraph in README.md. | 2 years ago |
| aclocal.m4 | autoconf: Move export_dynamic determination to configure | 3 years ago |
| configure | libpq: Add support for dumping SSL key material to file | 9 months ago |
| configure.ac | libpq: Add support for dumping SSL key material to file | 9 months ago |
| meson.build | libpq: Add support for dumping SSL key material to file | 9 months ago |
| meson_options.txt | aio: Add liburing dependency | 9 months ago |
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/.