On 2018/09/13 23:13, Tom Lane wrote:
> Amit Langote <[email protected]> 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);