On 2018/09/13 23:13, Tom Lane wrote:
> Amit Langote <langote_amit...@lab.ntt.co.jp> writes:
>> On 2018/09/13 1:14, Tom Lane wrote:
>>> That seems excessively restrictive.  Anything that has storage (e.g.
>>> matviews) ought to be truncatable, no?
> 
>> Not by heap_truncate it seems.  The header comment of heap_truncate says
>> that it concerns itself only with ON COMMIT truncation of temporary tables:
> 
> Ah.  Well, in that case I'm OK with just a simple test for
> RELKIND_RELATION, but I definitely feel that it should be inside
> heap_truncate.  Callers don't need to know about the limited scope
> of what that does.

I guess you meant inside heap_truncate_one_rel.  I updated the patch that
way, but I wonder if we shouldn't also allow other relkinds that have
storage which RelationTruncate et al can technically deal with.

Thanks,
Amit
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 9176f6280b..57df70f7b9 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -3195,6 +3195,10 @@ heap_truncate_one_rel(Relation rel)
 {
        Oid                     toastrelid;
 
+       /* Only certain relkinds have storage. */
+       if (rel->rd_rel->relkind != RELKIND_RELATION)
+               return;
+
        /* Truncate the actual file (and discard buffers) */
        RelationTruncate(rel, 0);
 

Reply via email to