Re: Table refer leak in logical replication
Amit Langote <amitlangote09@gmail.com>
From: Amit Langote <amitlangote09@gmail.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Amit Kapila <amit.kapila16@gmail.com>, "houzj.fnst@fujitsu.com" <houzj.fnst@fujitsu.com>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>, "shiy.fnst@fujitsu.com" <shiy.fnst@fujitsu.com>,
"tanghy.fnst@fujitsu.com" <tanghy.fnst@fujitsu.com>, Masahiko Sawada <sawada.mshk@gmail.com>
Date: 2021-04-21T12:58:10Z
Lists: pgsql-hackers
Attachments
- fix_relcache_leak_in_lrworker_v8.patch (application/octet-stream) patch v8
On Wed, Apr 21, 2021 at 7:38 PM Michael Paquier <michael@paquier.xyz> wrote: > On Wed, Apr 21, 2021 at 04:21:52PM +0900, Amit Langote wrote: > > So I had started last night by adding some tests for this in > > 003_constraints.pl because there are already some replica BR trigger > > tests there. I like your suggestion to have some tests around > > partitions, so added some in 013_partition.pl too. Let me know what > > you think. > > Thanks, cool! Thanks for looking. > + IF (NEW.bid = 4 AND NEW.id = OLD.id) THEN > + RETURN NEW; > + ELSE > + RETURN NULL; > + END IF; > Nit: the indentation is a bit off here. Hmm, I checked that I used 4 spaces for indenting, but maybe you're concerned that the whole thing is indented unnecessarily relative to the parent ELSIF block? > +CREATE FUNCTION log_tab_fk_ref_upd() RETURNS TRIGGER AS \$\$ > +BEGIN > + CREATE TABLE IF NOT EXISTS public.tab_fk_ref_op_log (tgtab text, > tgop text, tgwhen text, tglevel text, oldbid int, newbid int); > + INSERT INTO public.tab_fk_ref_op_log SELECT TG_RELNAME, TG_OP, > TG_WHEN, TG_LEVEL, OLD.bid, NEW.bid; > + RETURN NULL; > +END; > Let's use only one function here, then you can just do something like > that and use NEW and OLD as you wish conditionally: > IF (TG_OP = 'INSERT') THEN > INSERT INTO tab_fk_ref_op_log blah; > ELSIF (TG_OP = 'UPDATE') THEN > INSERT INTO tab_fk_ref_op_log blah_; > END IF; > > The same remark applies to the two files where the tests have been > introduced. That's certainly better with fewer lines. > Why don't you create the table beforehand rather than making it part > of the trigger function? Makes sense too. > +CREATE TRIGGER tab_fk_ref_log_ins_after_trg > [...] > +CREATE TRIGGER tab_fk_ref_log_upd_after_trg > No need for two triggers either once there is only one function. Right. > + "SELECT * FROM tab_fk_ref_op_log ORDER BY tgop, newbid;"); > I would add tgtab and tgwhen to the ORDER BY here, just to be on the > safe side, and apply the same rule everywhere. Your patch is already > consistent regarding that and help future debugging, that's good. Okay, done. -- Amit Langote EDB: http://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