PostgreSQL PL / Proxy和检测错误分片连接的异常

时间:2013-09-14 19:46:48

标签: postgresql exception-handling sharding

我正在尝试通过plpgsql函数中的异常检测到错误的postgres PL /代理分片连接。当直接调用函数时,这与预期完全一样(尝试访问错误的分片会引发异常)。但是,现有的代码库通过RUN ON语句中的plproxy函数间接调用该函数,在这种情况下,抛出异常会访问任何分片,无论好坏。有没有其他人看过这个和/或有解决方案或解决方法?

这是问题的修剪示例:

A)FunctionA是一个plproxy函数,它有以下几行:    RUN ON functionB($ 1,NULL);

B)functionB是一个plpgsql函数,它有以下行:    SELECT db_index FROM functionC();

C)functionC也是一个plpgsql函数,它具有检查连接的代码:    FOR db_id IN()LOOP       开始          PERFORM check_shard(db_id); - 这只是调用在分片上运行的函数       内部错误时的例外情况       然后          提高通知'出现ID%',db_id;       结束;    END LOOP;

当直接从SELECT中调用functionB或functionC时,好的分片不会抛出异常。但是当在RUN ON语句中使用函数调用调用plproxy functionA时,所有分片都会抛出异常。所以看起来plproxy函数或RUN ON语句会导致这个问题。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

这听起来像pl / proxy中的错误。我的建议是你用skytools维护者来解决这个问题。我不能为我的生活看到任何合理的理由,为什么这将是期望的行为,甚至可能发生。也许有些东西在某处阻塞了?