tableam: relation creation, VACUUM FULL/CLUSTER, SET TABLESPACE.
This moves the responsibility for:
- creating the storage necessary for a relation, including creating a
new relfilenode for a relation with existing storage
- non-transactional truncation of a relation
- VACUUM FULL / CLUSTER's rewrite of a table
below tableam.
This is fairly straight forward, with a bit of complexity smattered in
to move the computation of xid / multixid horizons below the AM, as
they don't make sense for every table AM.
Author: Andres Freund
Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/d25f519107bff602e1ebc81853fe592d020c118d
Modified Files
--------------
src/backend/access/heap/heapam_handler.c | 451 +++++++++++++++++++++++++++++++
src/backend/bootstrap/bootparse.y | 7 +-
src/backend/catalog/heap.c | 120 ++++----
src/backend/catalog/index.c | 11 +-
src/backend/catalog/storage.c | 88 ++++++
src/backend/commands/cluster.c | 342 ++---------------------
src/backend/commands/sequence.c | 30 +-
src/backend/commands/tablecmds.c | 180 ++++--------
src/backend/utils/cache/relcache.c | 77 +++---
src/include/access/tableam.h | 117 ++++++++
src/include/catalog/heap.h | 6 +-
src/include/catalog/storage.h | 3 +
src/include/utils/relcache.h | 3 +-
13 files changed, 856 insertions(+), 579 deletions(-)