我已经为第二个Postgres数据库建立了一个外部数据包装器,并导入了外部模式。现在,当我试图将一行插入到主数据库中的一个外部表时,它会碰到插入触发器上调用的函数。这个触发器正在检查外部表上存在的另一个表,但它说"关系"_other_table"不存在。我可以从主数据库中选择,但在执行触发器时,它看不到它。
我尝试使用相同名称的两个模式,然后将该模式重新导入到不同的名称,但仍然一无所获。就好像它在我的主表上执行触发器,但不知道在哪里查找另一个表。
有什么想法吗?
我一般不认为这个问题,所以它一定是关于您的设置的特定问题。
cat fdw_trigger.sql:
create database fgn;
c fgn
create table a (x int);
create table b (x int);
create or replace function foobar() returns trigger language plpgsql as $$ BEGIN insert into public.b values(NEW.x); return new; END $$;
create trigger lsadkjf before insert on a for each row execute function foobar() ;
c postgres
create schema fgn;
create extension postgres_fdw ;
create server fgn foreign data wrapper postgres_fdw OPTIONS ( dbname 'fgn');
create user MAPPING FOR CURRENT_USER SERVER fgn;
import foreign schema public from server fgn into fgn;
insert into fgn.a values (13);
c fgn
select * from b ;
select * from a ;
psql postgres-f fdw_trigger.sql
按预期工作。