search_path for replica-mode

Started by André Kutepowalmost 3 years ago3 messagesgeneral
Jump to latest
#1André Kutepow
a.kutepow@prodat-sql.de

There is a trigger in the database

SET search_path TO "$user", public;

CREATE OR REPLACE FUNCTION art__a_iu_func()
BEGIN
  INSERT INTO table_z...   --//»table_z« is in schema public//
END;

CREATE OR REPLACE TRIGGER art__a_iu
    AFTER INSERT OR UPDATE OF ak_nr
    ON art
    FOR EACH ROW
    EXECUTE FUNCTION art__a_iu_func();

In a regular trigger, it works great!
But, if I announce it, as:

ALTER TABLE art ENABLE REPLICA TRIGGER art__a_iu;
then I get an error:

/FEHLER:  Relation »table_z« existiert nicht bei Zeichen xxx//
//ANFRAGE:  INSERT INTO table_z...

/why does'nt work the search_path for replica-mode?
is it made specifically or is it a bug?
How else can I set the search_path for replica-mode?

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: André Kutepow (#1)
Re: search_path for replica-mode

On Monday, July 10, 2023, André Kutepow <a.kutepow@prodat-sql.de> wrote:

There is a trigger in the database

SET search_path TO "$user", public;

CREATE OR REPLACE FUNCTION art__a_iu_func()
BEGIN
INSERT INTO table_z... --*»table_z« is in schema public*
END;

CREATE OR REPLACE TRIGGER art__a_iu
AFTER INSERT OR UPDATE OF ak_nr
ON art
FOR EACH ROW
EXECUTE FUNCTION art__a_iu_func();

In a regular trigger, it works great!
But, if I announce it, as:

ALTER TABLE art ENABLE REPLICA TRIGGER art__a_iu;
then I get an error:

*FEHLER: Relation »table_z« existiert nicht bei Zeichen xxx*

*ANFRAGE: INSERT INTO table_z... *why does'nt work the search_path for
replica-mode?
is it made specifically or is it a bug?
How else can I set the search_path for replica-mode?

Relying on external search_path for system executed objects is
problematic. Don’t do it. Either attach a SET to the function or
schema-qualify references.

David J.

#3André Kutepow
a.kutepow@prodat-sql.de
In reply to: David G. Johnston (#2)
Re: search_path for replica-mode

Thanks David G. Johnston

Am 10.07.2023 um 15:11 schrieb David G. Johnston:

Show quoted text

On Monday, July 10, 2023, André Kutepow <a.kutepow@prodat-sql.de> wrote:

There is a trigger in the database

SET search_path TO "$user", public;

CREATE OR REPLACE FUNCTION art__a_iu_func()
BEGIN
  INSERT INTO table_z...   --//»table_z« is in schema public//
END;

CREATE OR REPLACE TRIGGER art__a_iu
    AFTER INSERT OR UPDATE OF ak_nr
    ON art
    FOR EACH ROW
    EXECUTE FUNCTION art__a_iu_func();

In a regular trigger, it works great!
But, if I announce it, as:

ALTER TABLE art ENABLE REPLICA TRIGGER art__a_iu;
then I get an error:

/FEHLER:  Relation »table_z« existiert nicht bei Zeichen xxx//
//ANFRAGE:  INSERT INTO table_z...

/why does'nt work the search_path for replica-mode?
is it made specifically or is it a bug?
How else can I set the search_path for replica-mode?

Relying on external search_path for system executed objects is
problematic.  Don’t do it. Either attach a SET to the function or
schema-qualify references.

David J.