From: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
To: Achilleas Mantzios <achill@matrix.gatewaynet.com>
To: pgsql-admin@lists.postgresql.org
Subject: Re: pgsql 8.3 : force FK (and consequently ON DELETE CASCADE) to be run under session_replication_role TO 'replica'
Date: Fri, 5 Jul 2019 18:42:40 +0200
Message-ID: <f0d2cbbb-ac4f-4dc0-7986-973fd1b311b4@2ndquadrant.com> (raw)
In-Reply-To: <a0d82106-4ee8-f165-275d-53b3135a2fae@matrix.gatewaynet.com>
References: <a0d82106-4ee8-f165-275d-53b3135a2fae@matrix.gatewaynet.com>
On 2019-07-05 12:17, Achilleas Mantzios wrote:
> we run some replication statements code under with session_replication_role TO 'replica' ,
> however this disables FK constraints and consequently some important ON DELETE CASCADE that must be run.
>
> I tested this and this works :
> psql -qt -c 'SELECT '\''ALTER TABLE mariner ENABLE ALWAYS TRIGGER "'\''|| tgname||'\''";'\'' from pg_trigger where tgconstrname='\''personal_email_sender_marinerid_fkey'\'' and tgisconstraint and
> tgrelid='\''mariner'\''::regclass' | psql -f -
>
> and then test with:
> BEGIN ;
> set session_replication_role TO 'replica';
> DELETE FROM mariner where id = 23700;
> SELECT * from personal_email_sender where marinerid = 23700;
> email | marinerid
> -------+-----------
> (0 rows)
>
> ^^^ and verify that the ON DELETE CASCADE is run.
>
> So, besides the obvious comment, that one should not mess with system triggers, do you see any potential gotcha with this particular one?
I think this is generally OK.
But if you are doing this, you probably have a replication system that
is running under the replica session role. The question is then whether
that replication system is OK with it. If you create replication sets
that contain parts of foreign key relationships and not others then you
might run into constraint violations.
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-admin@postgresql.org
Cc: peter.eisentraut@2ndquadrant.com, achill@matrix.gatewaynet.com, pgsql-admin@lists.postgresql.org
Subject: Re: pgsql 8.3 : force FK (and consequently ON DELETE CASCADE) to be run under session_replication_role TO 'replica'
In-Reply-To: <f0d2cbbb-ac4f-4dc0-7986-973fd1b311b4@2ndquadrant.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox