Thread: 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