Transaction safe Truncate
Ok. Transaction safe truncate is simply transaction safe cluster
without the data copy and a slightly different set of permission checks.
I'd like to split cluster_rel() in cluster.c into 2 functions at line
174. The permission checks, locking, etc will remain in cluster_rel().
The bottom half will be turned into a function called
rebuild_rel(tableOid Oid, indexOid Oid, dataCopy bool).
If dataCopy is set to false, then indexOid may be null -- this will
truncate the table.
Cluster will set dataCopy to true which will maintain current
expectations for cluster.
I'll also move TruncateRelation into cluster.c.
PreCommit_on_commit_actions() -> ONCOMMIT_DELETE_ROWS is the only
location using heap_truncate(). It may be possible to change this and
remove heap_truncate() altogether.
--
Rod Taylor <rbt@rbt.ca>
Rod Taylor <rbt@rbt.ca> writes:
I'd like to split cluster_rel() in cluster.c into 2 functions at line
174. The permission checks, locking, etc will remain in cluster_rel().
The bottom half will be turned into a function called
rebuild_rel(tableOid Oid, indexOid Oid, dataCopy bool).
I just finished fixing the division of labor between TruncateRelation
and heap_truncate. Please don't break it merely to avoid rearranging
code in cluster.c. Actually, I'd argue that cluster should adopt
truncate's code layout, not vice versa.
I'll also move TruncateRelation into cluster.c.
You could leave it where it is and just move heap_truncate.
regards, tom lane