我从plv8.elog()获取正确的输出时遇到问题。刚开始时,我正在使用由pgxn安装的PostgreSQL 9.2,plv8 1.4.1,在Ubuntu 12.10上。我正在构建一个函数,该函数包括嵌套的游标循环并使用许多准备好的语句。我正在正确关闭游标并释放准备好的语句。所有这些功能都会生成一个对象数组,这些对象是将插入许多不同表中的记录。
它崩溃的地方是我使用对象中的数据遍历该数组以生成查询字符串的那一刻。我处于代码这部分的构建阶段,因此在通常执行查询字符串的那一刻,我尝试将其输出到控制台。这就是腐败发生的地方。
当输出在我的测试中生成的9个查询字符串时,仅显示其中7个。当我进入postgres日志时,我发现在缺少的两个查询字符串的末尾,有一个字符看起来像是带有问号的菱形。基本上是某些字符无法在当前字符集中显示。我已经测试了查询生成器代码的所有部分,但找不到任何原因。我认为plv8.elog()函数或plv8引擎的字符串连接功能由于某些原因而损坏。
我的问题是,如果它是字符串连接功能,我将无法信任查询字符串以正确执行。我已经通过从函数中删除代码并在数组中使用静态信息来测试了代码。在这种情况下,它可以正常工作,因此我知道代码的这一部分没有问题。
首先,还有其他人见过吗? plv8.elog()的行为是否异常?当您的函数达到一定大小或复杂度时,是否有数据损坏?如果是这样,您是否能够找到一种解决该问题的方法?
另外,如果它是plv8.elog()函数,还有另一种获取变量值的方法吗?我知道应该有v8调试器功能,但是我一直未能成功使它工作。如果有人有使它工作的经验,请您能帮助我使它也工作吗?谢谢。
最佳答案
发生这种情况是因为plv8的日志输出被限制为一定数量的字节/位。如果要串联多个长字符串并将其发送到plv8.elog()
,则在达到最大字节数/位之后,它将切断字符串。为了解决这个问题,我这样做:
plv8.elog(INFO, myString.substring(0,800));
plv8.elog(INFO, myString.substring(801,1600));
plv8.elog(INFO, myString.substring(1601,2400));
我认为限制为1024,但是其中一些被日志输出的
INFO:
部分占用。