我有以下用于计算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
有人可以解释如何修复上述函数并适当地转换返回类型吗?
答案 0 :(得分:0)
经过一番研究,问题似乎是pllua无法将PostgreSQL BIGINT
类型作为整数值处理,并将它们视为" userdata值"。因此,在行:
return factorial_lua(n-1)*n
PL / Lua无法在raw datum userdata和整数n
之间进行算术运算。如果输入值n
和返回类型都定义为integer
,则该函数将起作用。