Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres fdw使用外部触发器插入记录_Postgresql_Triggers_Schema_Postgres Fdw - Fatal编程技术网

Postgresql Postgres fdw使用外部触发器插入记录

Postgresql Postgres fdw使用外部触发器插入记录,postgresql,triggers,schema,postgres-fdw,Postgresql,Triggers,Schema,Postgres Fdw,我已经为第二个Postgres数据库建立了一个外部数据包装器,并导入了外部模式。现在,当我尝试从主数据库向一个外部表插入一行时,它会命中一个调用insert触发器的函数。此触发器正在检查外部表上存在的另一个表,但它表示“关系”和“其他表”不存在。我可以从主数据库中进行选择,但在执行触发器时,它无法看到它 我尝试使用相同名称的两个模式,然后将该模式重新导入到不同的名称,但仍然没有任何结果。这就好像它正在主表上执行触发器,但不知道在哪里查找另一个表 有什么想法吗?我一般看不出这个问题,所以它一定是关

我已经为第二个Postgres数据库建立了一个外部数据包装器,并导入了外部模式。现在,当我尝试从主数据库向一个外部表插入一行时,它会命中一个调用insert触发器的函数。此触发器正在检查外部表上存在的另一个表,但它表示“关系”和“其他表”不存在。我可以从主数据库中进行选择,但在执行触发器时,它无法看到它

我尝试使用相同名称的两个模式,然后将该模式重新导入到不同的名称,但仍然没有任何结果。这就好像它正在主表上执行触发器,但不知道在哪里查找另一个表


有什么想法吗?

我一般看不出这个问题,所以它一定是关于你的设置的

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


正常工作。

您能举个例子吗?您是否用架构名称完全限定表名?数据库:CONV(我希望在其中编写脚本并将外部架构导入到其中)和临时数据库(我希望插入到其中的原始数据库)。我正试图在从CONV执行临时操作时插入到表中(我希望所有转换脚本都驻留在其中)。使用INSERT INTO(在CONV上)时,它会在调用函数的临时表上触发一个触发器。该函数检查表中的值,然后在“关系”s_“其他表”不存在时终止"在运行函数时是的,我使用的是完整的schema.table_名称。在临时数据库上运行相同的脚本是有效的。使用外部的schema.table_名称从CONV运行它是无效的。感谢指针。问题是触发器和函数处于临时状态,我从CONV插入。它在临时状态下启动插入,请参见触发器,并在调用函数时触发它-但是函数应该检查另一个临时表,但即使它确实存在于临时表中,也无法看到它。这就好像函数是针对CONV执行的(表不存在的地方)而不是反对过渡。您的描述似乎与我所做的相符,并且对我有效。请创建您自己的可复制测试用例,或者指出我们的用例分歧之处。感谢您继续跟进。请欣赏。也许可以在fgn表a上添加一个触发器,该触发器调用一个函数来检查表b上的内容,然后尝试inse来自博士后的rt这是我面临的,