[Slony1-patches] Removal of session replication role for Logical Replication compatibility
Steve Singer
steve at ssinger.info
Tue Feb 25 04:26:49 UTC 2020
On Thu, 20 Feb 2020, Richard Yen wrote:
I've CC's slony1-hackers since I don't think many people are subscribed to
-patches.
I'm inclined to apply this patch. I don't think the value of the extra check
is worth making like difficult for users that want to run the slony triggers
on a logical replica.
If someone things that the extra guard in the log trigger should be
configurable instead of just removed they should speak up.
>
>
> On Thu, Feb 20, 2020 at 4:16 AM Steve Singer <steve at ssinger.info> wrote:
> On Thu, 20 Feb 2020, Richard Yen wrote:
>
> So with your patch, what happens on node C?
> Do the replication triggers fire there as well?
>
>
> No, on node C, the replication triggers do not fire (i.e., sl_log_{1,2} are empty). This is because the
> triggers themselves are disabled on the tables (Slony's doing, not mine):
>
> pgbench=# select tgname, tgenabled from pg_trigger where tgname like '_slony_example%' order by 2;
> tgname | tgenabled
> --------------------------------+-----------
> _slony_example_truncatetrigger | D
> _slony_example_logtrigger | D
> _slony_example_truncatetrigger | D
> _slony_example_logtrigger | D
> _slony_example_truncatetrigger | D
> _slony_example_logtrigger | D
> _slony_example_truncatedeny | O
> _slony_example_truncatedeny | O
> _slony_example_denyaccess | O
> _slony_example_denyaccess | O
> _slony_example_denyaccess | O
> _slony_example_truncatedeny | O
> (12 rows)
>
> Granted, my patch is like taking the guardrails off, but I'd argue that the ENABLE/DISABLE syntax on PG's
> ALTER TABLE command is quite comprehensive, in terms of letting Slony do what it needs to do to make sure
> the triggers are properly turned on/off, based on the publisher/subscriber status.
>
> There are other locations where there's this redundancy of 1) setting triggers to fire on replica-only
> and 2) enforcing replica role identity in the C-side of the trigger code (i.e., logApply):
>
> pgbench=# \d _slony_example.sl_log_1;
> Table "_slony_example.sl_log_1"
> Column | Type | Collation | Nullable | Default
> ------------------+---------+-----------+----------+---------
> log_origin | integer | | |
> ...<snip>...
> Triggers firing on replica only:
> apply_trigger BEFORE INSERT ON _slony_example.sl_log_1 FOR EACH ROW EXECUTE PROCEDURE
> _slony_example.logapply('_slony_example')
>
> To avoid inserting more risk, I didn't take those checks out--just enough to get Slony working nicely
> with Logical Replication.
>
> With that said, getting Slony to work with Logical Replication (with my patch installed) isn't a trivial
> task. Between the "set add table" slonik command and the "subscribe set" slonik command, there needs to
> be a manual execution of "ALTER TABLE ENABLE TRIGGER [ALWAYS|REPLICA]" on each *_logtrigger and
> *_truncatetrigger for each table, along with an "ALTER TABLE DISABLE TRIGGER apply_trigger" for
> sl_log_{1,2} on the Slony-provider/LR-subscriber side (node B in my example). But at least with my
> patch, it becomes *possible* to set up such an architecture.
>
> Thanks for considering,
> --Richard
>
>
>
>
>
> > I recently came across a customer who sought to set up Slony on the tail end of a
> cascaded-replication
> > setup:
> > Node A -> Logical Replication -> Node B -> Slony -> Node C
> >
> > We discovered that this does not work because the client (WAL replay process) logs in as a
> Replica user,
> > but logTrigger won't fire unless replication role is Origin.
> >
> > Seeing that the "replication role == Origin" check is a bit dated, and Slony will
> enable/disable triggers
> > based on subscriber/provider status, I'm thinking that the attached patch might be worth a
> discussion.
> > After all, the "replication role == Origin" check basically negates all the replication
> role features
> > that are now baked into Postgres core.
> >
> > Please let me know if there are other factors to consider.
> >
> > Cheers,
> > --Richard
> >
> >
> >
> >
>
>
>
> --
> Richard Yen
> Principal Support Engineer
>
> ____________________________________________________________
> PRIVACY & CONFIDENTIALITY NOTICE
>
> Please ensure that any data relative to individual or entity privacy is not in violation of the General
> Data Protection Regulation Act, as outlined at https://gdpr-info.eu/. EnterpriseDB process requires that
> information which may be relevant to your technical discourse are submitted via either the Customer
> Portal through secure credentials, or provided via DropBox as provided by EnterpriseDB.
>
> This e-mail transmission and any documents, files, or previous e-mail messages appended or attached to
> it, may contain information that is confidential or legally privileged. If you are not the intended
> recipient, or a person responsible for delivering it to the intended recipient, you are hereby notified
> that you must not read this transmission and that any disclosure, copying, printing, distribution, or use
> of the information contained or attached to this transmission is STRICTLY PROHIBITED. If you have
> received this transmission in error, please immediately notify the sender by telephone or return e-mail
> message and delete the original transmission, its attachments, and any copies without reading or saving
> in any manner. Thank you.
>
>
More information about the Slony1-patches
mailing list