背景:《使用pl/lua寫存儲(chǔ)過程提升10倍性能》文章闡述了一個(gè)使用lua的新思路,感覺很好,想測(cè)試下,但是安裝遇到不少坑,經(jīng)過努力解決這些問題,本文總結(jié)。
一 安裝lua-3.5
cd /opt
wget http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar xvf lua-5.3.5.tar.gz
安裝lua比較簡(jiǎn)單,但是存在如下問題:
1 一般操作系統(tǒng)會(huì)有裝lua低版本5.1,為了不沖突,需要把5.3.5安裝到指定目錄下比較方便管理。
2 pl/lua需要生成liblua.so動(dòng)態(tài)庫(kù),但是默認(rèn)安裝不會(huì)生成。
3 默認(rèn)的編譯出來的lua再編譯選項(xiàng)中沒有加“-fPIC”,會(huì)導(dǎo)致我們后面編譯pllua時(shí)報(bào)錯(cuò):
/usr/bin/ld: /usr/local/lib/liblua.a(loadlib.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
為此,我們需要修改lua的編譯文件,這涉及l(fā)ua-5.3.5/MakeFile與lua-5.3.5/src/MakeFile兩個(gè)編譯文件。
1 編譯加-fPIC與生成liblua.so需要修改lua-5.3.5/src下的MakeFile文件:
# 修改CFLAGS編譯參數(shù)
# 原:CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_2 $(SYSCFLAGS) $(MYCFLAGS)
# 修該為如下:
CFLAGS= -fPIC -O2 -Wall -Wextra -DLUA_COMPAT_5_2 $(SYSCFLAGS) $(MYCFLAGS)
# 修改使其支持liblua.so生成
# 新增LUA_SO
LUA_SO=liblua.so
# 修改ALL_T,結(jié)尾加$(LUA_SO)
ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
# 新增,換行后的$(CC)前面是tab鍵后形成的空格
$(LUA_SO): $(CORE_O) $(LIB_O)
$(CC) -o $@ -shared $? -ldl -lm
2 修改lua-5.3.5下的MakeFile文件,主要修改安裝路徑:
# 原:INSTALL_TOP= /usr/local
# 修改為:
INSTALL_TOP= /usr/local/lua-5.3.5
3 執(zhí)行l(wèi)ua安裝
cd /opt/lua-5.3.5
make linux test
make install
4 修改環(huán)境變量并驗(yàn)證
vi /etc/profile
# 新增lua相關(guān)
export LUA_HOME=/usr/local/lua-5.3.5
# 系統(tǒng)原有的PATH參數(shù)后追加,這里簡(jiǎn)寫,只寫了自己的lua的bin
export PATH=$LUA_HOME/bin:$PATH
# 更新環(huán)境變量
source /etc/profile
# 查看lua版本
lua -v
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
lua安裝完成了。
二 安裝pl/lua
下載安裝介質(zhì):
cd /opt
git clone https://github.com/pllua/pllua-ng.git
pl/lua也要修改,原因是pl/lua的MakeFile里很多l(xiāng)ua指定了版本號(hào)和安裝路徑,需要手動(dòng)修改下:
cd pllua-ng
vi Makefile
# General
#原: LUA_INCDIR ?= /usr/local/include/lua53
LUA_INCDIR ?= /usr/local/lua-5.3.5/include/lua
#原: LUALIB ?= -L/usr/local/lib -llua-5.3
LUALIB ?= -L/usr/local/lua-5.3.5/lib -llua
# 原: LUAC ?= luac53
LUAC ?= luac
#原: LUA ?= lua53
LUA ?= lua
保存后退出。
安裝pl/lua:
cd pllua-ng
# 指定自己安裝的pg的pg_config位置。
make PG_CONFIG=/home/postgres/bin/pg_config
make PG_CONFIG=/home/postgres//bin/pg_config install
創(chuàng)建擴(kuò)展:
psql -d test
test=# create extension pllua;
CREATE EXTENSION