PL/LUA类型错误: [pllua]: 原始数据期望用于数据转换,但实际得到的是数字

我有一个下面所示的 PL/LUA 函数(PostgreSQL 9.6),用于计算阶乘,该函数接受整数作为输入,需要返回一个 BIGINT 类型作为结果。我无法弄清如何正确地转换返回值。

CREATE OR REPLACE FUNCTION factorial_lua(n integer) RETURNS bigint AS $$
  if (n == 0) then return 1 end
  return factorial_lua(n-1)*n
$$ LANGUAGE pllua;

评估该函数会生成以下错误:

=> SELECT factorial_lua(3);
ERROR:  [pllua]: 原始数据期望用于数据转换,但实际得到的是数字

有人能解释一下如何修复上述函数并适当地转换返回类型吗?

点赞
用户4196578
用户4196578

经过一些研究,问题似乎是 pllua 不能将 PostgreSQL 的 BIGINT 类型作为整数值处理,而将它们视为“userdata值”。因此,在下面这行代码中:

return factorial_lua(n-1)*n

PL/Lua 无法在原始datum userdata和整数n之间进行算术运算。如果输入值n和返回类型都定义为“integer”,则该函数将起作用。

2017-03-28 03:33:08