mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +03:00
Small fixes
This commit is contained in:
parent
3f558e3dae
commit
f4516f8732
@ -1,4 +1,4 @@
|
|||||||
$PostgreSQL: pgsql/src/backend/access/gist/README,v 1.2 2005/09/15 17:44:27 neilc Exp $
|
$PostgreSQL: pgsql/src/backend/access/gist/README,v 1.3 2005/09/16 14:40:54 teodor Exp $
|
||||||
|
|
||||||
This directory contains an implementation of GiST indexing for Postgres.
|
This directory contains an implementation of GiST indexing for Postgres.
|
||||||
|
|
||||||
@ -21,7 +21,9 @@ The current implementation of GiST supports:
|
|||||||
* Concurrency
|
* Concurrency
|
||||||
* Recovery support via WAL logging
|
* Recovery support via WAL logging
|
||||||
|
|
||||||
The support for concurrency implemented in PostgreSQL was developed based on the paper "Access Methods for Next-Generation Database Systems" by Marcel Kornaker:
|
The support for concurrency implemented in PostgreSQL was developed based on
|
||||||
|
the paper "Access Methods for Next-Generation Database Systems" by
|
||||||
|
Marcel Kornaker:
|
||||||
|
|
||||||
http://www.sai.msu.su/~megera/postgres/gist/papers/concurrency/access-methods-for-next-generation.pdf.gz
|
http://www.sai.msu.su/~megera/postgres/gist/papers/concurrency/access-methods-for-next-generation.pdf.gz
|
||||||
|
|
||||||
@ -31,11 +33,11 @@ The original algorithms were modified in several ways:
|
|||||||
algorithm was considerably changed, because in PostgreSQL function search
|
algorithm was considerably changed, because in PostgreSQL function search
|
||||||
should return one tuple (next), not all tuples at once. Also, it should
|
should return one tuple (next), not all tuples at once. Also, it should
|
||||||
release page locks between calls.
|
release page locks between calls.
|
||||||
* Since we added support for variable length keys, it's not possible to guarantee
|
* Since we added support for variable length keys, it's not possible to
|
||||||
enough free space for all keys on pages after splitting. User defined function
|
guarantee enough free space for all keys on pages after splitting. User
|
||||||
picksplit doesn't have information about size of tuples (each tuple may
|
defined function picksplit doesn't have information about size of tuples
|
||||||
contain several keys as in multicolumn index while picksplit could work with
|
(each tuple may contain several keys as in multicolumn index while picksplit
|
||||||
only one key) and pages.
|
could work with only one key) and pages.
|
||||||
* We modified original INSERT algorithm for performance reason. In particular,
|
* We modified original INSERT algorithm for performance reason. In particular,
|
||||||
it is now a single-pass algorithm.
|
it is now a single-pass algorithm.
|
||||||
* Since the papers were theoretical, some details were omitted and we
|
* Since the papers were theoretical, some details were omitted and we
|
||||||
@ -197,7 +199,7 @@ placetopage(page, keysarray)
|
|||||||
if ( no space left on page )
|
if ( no space left on page )
|
||||||
keysarray = pageSplit(page, [ extract_keys(page), keysarray])
|
keysarray = pageSplit(page, [ extract_keys(page), keysarray])
|
||||||
last page in chain gets old NSN,
|
last page in chain gets old NSN,
|
||||||
original and others - new NSN from current LSN
|
original and others - new NSN equals to LSN
|
||||||
if ( page is root )
|
if ( page is root )
|
||||||
make new root with keysarray
|
make new root with keysarray
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user