我在PostgreSql中有一个函数:
do $$
declare
arow record;
foo varchar(50);
begin
for arow in
select name from person s(a)
loop
foo := arow.name;
RAISE NOTICE 'Calling asmx(%)', foo;
end loop;
end;
$$;
我想在C#(asmx)中调用一个Web服务,在我打印NOTICE的行中。
有可能吗?如果没有,有什么建议吗?
答案 0 :(得分:2)
虽然可能从长时间运行的功能中执行此操作,但出于多种原因,这是一个可怕的想法。
相反,您应该在频道上NOTIFY
,然后让LISTEN
客户端守护程序接收通知并调用Web服务。
这与"how do I send an email from a function/trigger"基本上是同一个问题,存在所有相同的问题,例如:
如果您确定必须直接从该功能调用Web服务,则需要使用PL / Perl,PL / python,PL / TCL,PL / Java或实现C函数来进行调用。您无法直接在PL / PgSQL中执行此操作,因为它没有TCP / IP,HTTP等支持(按设计;它意味着包含在数据库内操作中并受数据库安全模型的限制)。您的Pl / PgSQL函数可以使用另一种语言调用。从该语言调用Web服务就像从该语言中的任何其他函数调用它(除非您不能使用线程)。
但请不要。使用LISTEN
和NOTIFY
。这就是他们的目的。
重新“每隔几个小时”位:不要尝试使用数据库功能。由于函数的长时间运行事务导致不可移动的行版本,这会导致性能问题。使用task scheduler / cron / pgagent / ...