我使用 PostgreSQL 11。
我使用postgres_fdw
扩展将行插入到不同服务器上的表中。
所以我创建了一个外部表......让我们调用它foo
,我有一个AFTER INSERT
触发器,它执行一个函数,该函数将该行插入到配置的远程服务器上的外部表中。
如果服务器没有响应,触发器将冻结直到超时。
所以我对这个问题有几个问题:
查询执行能否在执行后插入之前返回客户端,这样就不会阻止用户执行其他插入
系统可以检查此服务器的有效性,如果它无法连接到它以标记它几分钟,因此它甚至不会尝试将插入发送给它?
一般来说,插入被发送到备份服务器,如果服务器没有响应或者响应时间太长,它不应该对客户端产生任何影响。
所以我不希望后插入延迟行实际插入到表中,我不希望任何与连接相关的问题导致任何延迟。
我怎样才能实现这样的事情?
我将创建一个示例代码,以便您了解我在做什么。
假设 foo 是我的外表。
CREATE OR REPLACE FUNCTION after_insert() RETURNS TRIGGER AS $after_insert$
DECLARE
res BOOL;
BEGIN
INSERT INTO foo(bar1,bar2,bar3) values(foo1,foo2,foo3);
EXCEPTION WHEN OTHERS THEN raise NOTICE '% %', sqlstate, sqlerrm;
RETURN NEW;
END;
$after_insert$ LANGUAGE plpgsql;
CREATE TRIGGER after_insert AFTER INSERT
ON my_table FOR EACH ROW EXECUTE PROCEDURE after_insert();