Я использую 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();