如何记录dblink_exec结果?

时间:2011-10-19 08:31:28

标签: postgresql logging dblink

在PostgreSQL中我使用dblink_exec。有没有办法每次dblink执行时都可以记录?

1 个答案:

答案 0 :(得分:1)

我不知道一种简单的方法,比如在PostgreSQL中记录一些函数的配置设置。 (如果有人这样做,我感兴趣!)

你可以破解函数的来源,在每次调用时发出通知并重新编译。

或者,如果您对C的了解像我一样生锈,那么您可以以非常小的性能成本将函数包装在plpgsql函数中,该函数在调用dblink_exec之前或之后引发通知/警告。像这样:

CREATE OR REPLACE FUNCTION mydblink_exec(text)
  RETURNS text AS
$$
RAISE NOTICE 'My text. Called with: "%"', $1;

RETURN dblink_exec($1);
$$
  LANGUAGE plpgsql VOLATILE STRICT;

您可以将原始dblink_exec()函数移动到其他名称或架构,以使其成为替代品。只有你必须这样做。见下文。

小心覆盖所需的所有形式的dblink_exec()。我quote the manual

dblink_exec(text connname, text sql [, bool fail_on_error]) returns text
dblink_exec(text connstr, text sql [, bool fail_on_error]) returns text
dblink_exec(text sql [, bool fail_on_error]) returns text

您可以使用function overloading 如果您实际上将原始函数移动到自定义名称/模式,请小心升级到新版本的PostgreSQL或重新安装dblink contrib模块。