我有一些长时间运行的触发器,执行非常长的计算。我想通过插入到日志表中来提供一些可见性,本质上是raise warning的存档版本。我的问题是记录只在触发器完成时显示,有什么方法可以实现这一点吗?
我最初用这个插入到登录表中来替换我的两个触发器的Raise警告,有趣的是,其中一个触发器直到今天都是这样的,另一个没有。
我曾尝试在触发器中使用保存点和开始/ END块,但没有成功,就像这样
create or replace function test_and_drop() returns integer
cost 10
language plpgsql
as
$$
DECLARE
i integer;
BEGIN
for i in 1..10 loop
begin
insert into administration.logging_activity values(
clock_timestamp(), 'xxx', i, 'test', 'RUNNING', 'test', .0);
PERFORM pg_sleep(5);
end;
end loop;
return i;
END;
$$;
编辑我有一个不太理想的解决方案,似乎工作正常。
基于上面的简化代码,它应该是这样的:
create or replace function test_and_drop() returns integer
cost 10
language plpgsql
as
$$
DECLARE
i integer;
BEGIN
for i in 1..20 loop
PERFORM dblink('host=167.71.00.000 port=5432 dbname=ekfc user=postgres password=000000000000000',
format( 'insert into administration.logging_activity values(%L, %L, %L, %L, %L, %L, %L)',
clock_timestamp() , '2023-02-29-XXX-098189598535351', i, 'testing', 'RUNNING', 'Pricing proposal', 0.1));
PERFORM pg_sleep(5);
end loop;
return i;
END;
$$;
1条答案
按热度按时间sxissh061#
这不是一个理想的解决方案,但这对我的工作在我的限制,并可能是有用的其他人在类似的困境.我测试,它工作正常,当然使用密码是丑陋的地狱,并不太安全.