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);