PL / LUA类型错误:[pllua]:数据转换所需的原始数据,得到数字

时间:2017-03-26 03:12:17

标签: postgresql lua pllua

我有以下用于计算factorial的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]: raw datum expected for datum conversion, got number

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

1 个答案:

答案 0 :(得分:0)

经过一番研究,问题似乎是pllua无法将PostgreSQL BIGINT类型作为整数值处理,并将它们视为" userdata值"。因此,在行:

return factorial_lua(n-1)*n

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