Re: Table refer leak in logical replication
Masahiko Sawada <sawada.mshk@gmail.com>
From: Masahiko Sawada <sawada.mshk@gmail.com>
To: "houzj.fnst@fujitsu.com" <houzj.fnst@fujitsu.com>
Cc: "tanghy.fnst@fujitsu.com" <tanghy.fnst@fujitsu.com>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>
Date: 2021-04-06T03:23:56Z
Lists: pgsql-hackers
Attachments
- fix_relcache_leak_in_lrworker.patch (application/x-patch) patch
On Tue, Apr 6, 2021 at 10:15 AM houzj.fnst@fujitsu.com <houzj.fnst@fujitsu.com> wrote: > > > WARNING: relcache reference leak: relation "xxx" not closed. > > > > Example of the procedure: > > ------publisher------ > > create table test (a int primary key); > > create publication pub for table test; > > > > ------subscriber------ > > create table test (a int primary key); > > create subscription sub connection 'dbname=postgres' publication pub; > > create function funcA() returns trigger as $$ begin return null; end; $$ language > > plpgsql; create trigger my_trig after insert or update or delete on test for each > > row execute procedure funcA(); alter table test enable replica trigger my_trig; > > > > ------publisher------ > > insert into test values (6); > > > > It seems an issue about reference leak. Anyone can fix this? > > It seems ExecGetTriggerResultRel will reopen the target table because it cannot find an existing one. > Storing the opened table in estate->es_opened_result_relations seems solves the problem. It seems like commit 1375422c is related to this bug. The commit introduced a new function ExecInitResultRelation() that sets both estate->es_result_relations and estate->es_opened_result_relations. I think it's better to use ExecInitResultRelation() rather than directly setting estate->es_opened_result_relations. It might be better to do that in create_estate_for_relation() though. Please find an attached patch. Since this issue happens on only HEAD and it seems an oversight of commit 1375422c, I don't think regression tests for this are essential. Regards, -- Masahiko Sawada EDB: https://www.enterprisedb.com/
Commits
-
Add more tests with triggers on partitions for logical replication
- 2ecfeda3e916 14.0 landed
-
Fix relation leak for subscribers firing triggers in logical replication
- f3b141c48255 14.0 landed
-
Create ResultRelInfos later in InitPlan, index them by RT index.
- 1375422c7826 14.0 cited