我正在尝试通过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语句会导致这个问题。
非常感谢任何帮助!
答案 0 :(得分:0)
这听起来像pl / proxy中的错误。我的建议是你用skytools维护者来解决这个问题。我不能为我的生活看到任何合理的理由,为什么这将是期望的行为,甚至可能发生。也许有些东西在某处阻塞了?