如何在PL/Lua中使用luarocks模块?

我想在存储的luajit pllua中使用luarocks模块。

示例

luarocks install lua-requests

样例函数

CREATE FUNCTION request_test (list text[])
RETURNS text[] AS $$
-- set_paths.lua
local version = _VERSION:match("%d+%.%d+")
package.path = './?.lua;/usr/local/share/luajit-2.1.0-beta3/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;' .. package.path
package.cpath = './?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so;' ..package.cpath
--requests = require('requests')
local requests = require('/usr/local/share/lua/5.1/requests.lua')
list[7] = 'check'
return list
$$ LANGUAGE pllua;

用法

select request_test(ARRAY['q','w','e']);

执行结果

ERROR:  [string "request_test"]:7: attempt to call global 'require' (a nil    value)
CONTEXT:
stack traceback(trusted):
    [string "request_test"]:7: in function <[string "request_test"]:1>
********** Error **********

ERROR: [string "request_test"]:7: attempt to call global 'require' (a nil value)
SQL state: 38000
Context:
stack traceback(trusted):
[string "request_test"]:7: in function <[string "request_test"]:1>

路径检测

CREATE FUNCTION require_test ()
RETURNS text[] AS $$
local list = {}
list[1] = _VERSION:match("%d+%.%d+")
list[2] = package.path
list[3] = package.cpath
list[4] = 'test'
return list
$$ LANGUAGE pllua;

结果

select require_test()

5.1,./?.lua;/usr/local/share/luajit-2.1.0-beta3/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;./?.lua;/usr/local/share/luajit-2.1.0-beta3/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;./?.lua;/usr/local/share/luajit-2.1.0-beta3/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;./?.lua;/usr/local/share/luajit-2.1.0-beta3/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;./?.lua;/usr/local/share/luajit-2.1.0-beta3/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua,./?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so;./?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so;./?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so;./?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so;./?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so,test

global 'require' (a nil value) ?

如何在luarocks模块中使用require?

点赞