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
v1-0001-Avoid-unnecessary-table-open-close-for-TRUNCATE-f.patch
Description: Binary data