我已经为第二个 Postgres 数据库建立了一个外部数据包装器并导入了外部模式。现在,当我尝试从我的主数据库向其中一个外部表插入一行时,它会遇到一个在插入触发器上调用的函数。此触发器正在检查外部表上存在的另一个表,但它说“关系“the_other_table”不存在。我可以从主数据库中选择它,但在执行触发器时它看不到它。
我尝试使用相同名称的两个架构,然后将架构重新导入到不同的名称,但仍然没有。就好像它正在我的主表上执行触发器,但不知道在哪里寻找另一个表。
有任何想法吗?
我已经为第二个 Postgres 数据库建立了一个外部数据包装器并导入了外部模式。现在,当我尝试从我的主数据库向其中一个外部表插入一行时,它会遇到一个在插入触发器上调用的函数。此触发器正在检查外部表上存在的另一个表,但它说“关系“the_other_table”不存在。我可以从主数据库中选择它,但在执行触发器时它看不到它。
我尝试使用相同名称的两个架构,然后将架构重新导入到不同的名称,但仍然没有。就好像它正在我的主表上执行触发器,但不知道在哪里寻找另一个表。
有任何想法吗?
我一般看不到这个问题,所以它一定是关于你的设置的。
猫 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
按预期工作。