Thread: Transaction safe Truncate

Transaction safe Truncate

From
Rod Taylor
Date:
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>


Re: Transaction safe Truncate

From
Tom Lane
Date:
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