Avoid unnecessary table open/close for TRUNCATE foo, foo, foo; kind of commands

From: Bharath Rupireddy <bharath(dot)rupireddyforpostgres(at)gmail(dot)com>
To: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Avoid unnecessary table open/close for TRUNCATE foo, foo, foo; kind of commands
Date: 2021-04-09 15:21:30
Message-ID: CALj2ACUdBO_sXJTa08OZ0YT0qk7F_gAmRa9hT4dxRcgPS4nsZA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

While checking the ExecuteTruncate code for the FOREIGN TRUNCATE
feature, I saw that we filter out the duplicate relations specified in
the TRUNCATE command. But before skipping the duplicates, we are just
opening the relation, then if it is present in the already seen
relids, then closing it and continuing further.

I think we can just have the duplicate checking before table_open so
that in cases like TRUNCATE foo, foo, foo, foo; we could save costs of
table_open and table_close. Attaching a small patch. Thoughts?

This is just like what we already do for child tables, see following
in ExecuteTruncate:
foreach(child, children)
{
Oid childrelid = lfirst_oid(child);

if (list_member_oid(relids, childrelid))
continue;

With Regards,
Bharath Rupireddy.
EnterpriseDB: http://www.enterprisedb.com

Attachment Content-Type Size
v1-0001-Avoid-unnecessary-table-open-close-for-TRUNCATE-f.patch application/octet-stream 1.5 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Amul Sul 2021-04-09 15:39:49 Re: Avoid unnecessary table open/close for TRUNCATE foo, foo, foo; kind of commands
Previous Message Kohei KaiGai 2021-04-09 14:49:09 Re: TRUNCATE on foreign table