diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 1894485901..bc83a9a4a0 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -1225,19 +1225,22 @@ ExecuteTruncate(TruncateStmt *stmt) heap_create_init_fork(rel); heap_relid = RelationGetRelid(rel); - toast_relid = rel->rd_rel->reltoastrelid; /* * The same for the toast table, if any. */ + toast_relid = rel->rd_rel->reltoastrelid; if (OidIsValid(toast_relid)) { - rel = relation_open(toast_relid, AccessExclusiveLock); - RelationSetNewRelfilenode(rel, rel->rd_rel->relpersistence, + Relation toastrel = relation_open(toast_relid, + AccessExclusiveLock); + + RelationSetNewRelfilenode(toastrel, + toastrel->rd_rel->relpersistence, RecentXmin, minmulti); - if (rel->rd_rel->relpersistence == RELPERSISTENCE_UNLOGGED) - heap_create_init_fork(rel); - heap_close(rel, NoLock); + if (toastrel->rd_rel->relpersistence == RELPERSISTENCE_UNLOGGED) + heap_create_init_fork(toastrel); + heap_close(toastrel, NoLock); } /* diff --git a/src/test/regress/expected/stats.out b/src/test/regress/expected/stats.out index 4f397a3280..2a1d1e24ac 100644 --- a/src/test/regress/expected/stats.out +++ b/src/test/regress/expected/stats.out @@ -80,9 +80,9 @@ end $$ language plpgsql; -- test effects of TRUNCATE on n_live_tup/n_dead_tup counters CREATE TABLE trunc_stats_test(id serial); -CREATE TABLE trunc_stats_test1(id serial); +CREATE TABLE trunc_stats_test1(id serial, stuff text); CREATE TABLE trunc_stats_test2(id serial); -CREATE TABLE trunc_stats_test3(id serial); +CREATE TABLE trunc_stats_test3(id serial, stuff text); CREATE TABLE trunc_stats_test4(id serial); -- check that n_live_tup is reset to 0 after truncate INSERT INTO trunc_stats_test DEFAULT VALUES; diff --git a/src/test/regress/sql/stats.sql b/src/test/regress/sql/stats.sql index 521dc4d6a3..bb116185c7 100644 --- a/src/test/regress/sql/stats.sql +++ b/src/test/regress/sql/stats.sql @@ -76,9 +76,9 @@ $$ language plpgsql; -- test effects of TRUNCATE on n_live_tup/n_dead_tup counters CREATE TABLE trunc_stats_test(id serial); -CREATE TABLE trunc_stats_test1(id serial); +CREATE TABLE trunc_stats_test1(id serial, stuff text); CREATE TABLE trunc_stats_test2(id serial); -CREATE TABLE trunc_stats_test3(id serial); +CREATE TABLE trunc_stats_test3(id serial, stuff text); CREATE TABLE trunc_stats_test4(id serial); -- check that n_live_tup is reset to 0 after truncate