PostgreSQL and pllua
我正在尝试构建pllua模块,但是遇到了一些麻烦。
我认为问题出在错误的PostgreSQL版本上,但是我不确定,如果有人可以帮助我,我将不胜感激。
Postgres位置:/opt/PostgreSQL/9.3/bin(是不支持EnterEnterb版本)
Lua位置:/ opt / myLua(使用luaDist构建)
1 2 3 4 5 6 7 8 9 10 11 12 13 | root@lua:/opt/BootstrapLuaDist/LuaDist/bin# ./luadist /opt/myLua/ list Installed modules: ================== bit32-5.2.0 (Ubuntu-x86_64) [provided BY luajit-2.0.3] lua-5.1.5 (Ubuntu-x86_64) [provided BY luajit-2.0.3] luaffi-1.0 (Ubuntu-x86_64) [provided BY luajit-2.0.3] luafilesystem-1.6.2 (Ubuntu-x86_64) luajit-2.0.3 (Ubuntu-x86_64) luasocket-3.0-rc1 (Ubuntu-x86_64) srlua-5.1 (Ubuntu-x86_64) zlib-1.2.6 (Ubuntu-x86_64) |
我已经修改了pllua makefile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | # Makefile FOR PL/Lua # $Id: Makefile,v 1.12 2009/09/20 14:20:48 carvalho EXP $ # Lua specific # General #LUAINC = -I/usr/LOCAL/include #LUALIB = -L/usr/LOCAL/lib -llua # LuaJIT #LUAINC = -I/usr/LOCAL/include/luajit-2.0 #LUALIB = -L/usr/LOCAL/lib -lluajit-5.1 #myLuaJit 2.0.3 LUAINC= -I/opt/myLua/include LUALIB = -L/op/myLua/lib -lliblua # Debian/Ubuntu #LUAINC = -I/usr/include/lua5.1 #LUALIB = -llua5.1 # Fink #LUAINC = -I/sw/include -I/sw/include/postgresql #LUALIB = -L/sw/lib -llua # Lua FOR Windows #LUAINC = -IC:/PROGRA~1/Lua/5.1/include #LUALIB = -LC:/PROGRA~1/Lua/5.1/lib -llua5.1 # no need TO edit below here MODULE_big = pllua EXTENSION = pllua DATA = pllua--1.0.sql #DATA_built = pllua.sql REGRESS = plluatest OBJS = pllua.o plluaapi.o plluaspi.o PG_CPPFLAGS = $(LUAINC) SHLIB_LINK = $(LUALIB) #PG_CONFIG = /usr/LOCAL/pgsql/bin/pg_config PG_CONFIG = /opt/PostgreSQL/9.3/bin/pg_config #PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) |
但是编译出现错误和警告:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | root@lua:/opt/pllua-1.0# make gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I/opt/myLua/include -I. -I. -I/opt/PostgreSQL/9.3/include/postgresql/server -I/opt/PostgreSQL/9.3/include/postgresql/internal -D_GNU_SOURCE -I/opt/LOCAL/20140108/fc7f8f12-7861-11e3-aaff-000c29d23b02/include/libxml2 -I/usr/LOCAL/include/libxml2 -I/usr/LOCAL/include -c -o pllua.o pllua.c gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I/opt/myLua/include -I. -I. -I/opt/PostgreSQL/9.3/include/postgresql/server -I/opt/PostgreSQL/9.3/include/postgresql/internal -D_GNU_SOURCE -I/opt/LOCAL/20140108/fc7f8f12-7861-11e3-aaff-000c29d23b02/include/libxml2 -I/usr/LOCAL/include/libxml2 -I/usr/LOCAL/include -c -o plluaapi.o plluaapi.c IN file included FROM plluaapi.c:8:0: rowstamp.h: IN FUNCTION a€?rowstamp_seta€?: rowstamp.h:26:2: warning: implicit declaration OF FUNCTION a€?HeapTupleHeaderGetXmina€? [-Wimplicit-function-declaration] stamp->xmin = HeapTupleHeaderGetXmin(tup->t_data); ^ plluaapi.c: At top level: plluaapi.c:41:3: error: UNKNOWN TYPE name a€?int2a€? int2 len; ^ plluaapi.c: IN FUNCTION a€?luaP_gettypeinfoa€?: plluaapi.c:149:5: warning: implicit declaration OF FUNCTION a€?GETSTRUCTa€? [-Wimplicit-function-declaration] typeinfo = (Form_pg_type) GETSTRUCT(TYPE); ^ plluaapi.c:149:16: warning: CAST TO pointer FROM INTEGER OF different SIZE [-Wint-to-pointer-CAST] typeinfo = (Form_pg_type) GETSTRUCT(TYPE); ^ plluaapi.c: IN FUNCTION a€?luaP_modinita€?: plluaapi.c:350:11: warning: implicit declaration OF FUNCTION a€?heap_getattra€? [-Wimplicit-function-declaration] lua_pushstring(L, text2string(heap_getattr(SPI_tuptable->vals[i], ^ plluaapi.c: IN FUNCTION a€?luaP_newfunctiona€?: plluaapi.c:637:12: warning: CAST TO pointer FROM INTEGER OF different SIZE [-Wint-to-pointer-CAST] procst = (Form_pg_proc) GETSTRUCT(proc); ^ plluaapi.c: IN FUNCTION a€?luaP_pusharraya€?: plluaapi.c:753:9: warning: implicit declaration OF FUNCTION a€?fetch_atta€? [-Wimplicit-function-declaration] luaP_pushdatum(L, fetch_att(*p, ti->byval, ti->len), typeelem); ^ plluaapi.c:755:9: warning: implicit declaration OF FUNCTION a€?att_addlength_pointera€? [-Wimplicit-function-declaration] *p = att_addlength_pointer(*p, ti->len, *p); ^ plluaapi.c:755:12: warning: assignment makes pointer FROM INTEGER WITHOUT a CAST [enabled BY DEFAULT] *p = att_addlength_pointer(*p, ti->len, *p); ^ plluaapi.c:756:9: warning: implicit declaration OF FUNCTION a€?att_align_nominala€? [-Wimplicit-function-declaration] *p = (CHAR *) att_align_nominal(*p, ti->align); ^ plluaapi.c:756:14: warning: CAST TO pointer FROM INTEGER OF different SIZE [-Wint-to-pointer-CAST] *p = (CHAR *) att_align_nominal(*p, ti->align); ^ plluaapi.c: IN FUNCTION a€?luaP_toarraya€?: plluaapi.c:954:13: warning: implicit declaration OF FUNCTION a€?store_att_byvala€? [-Wimplicit-function-declaration] store_att_byval(*p, PointerGetDatum(v), ti->len); ^ plluaapi.c: IN FUNCTION a€?luaP_todatuma€?: plluaapi.c:1047:15: warning: implicit declaration OF FUNCTION a€?heap_form_tuplea€? [-Wimplicit-function-declaration] dat = PointerGetDatum(SPI_returntuple(heap_form_tuple(ti->tupdesc, ^ plluaapi.c:1047:15: warning: passing argument 1 OF a€?SPI_returntuplea€? makes pointer FROM INTEGER WITHOUT a CAST [enabled BY DEFAULT] IN file included FROM pllua.h:18:0, FROM plluaapi.c:7: /opt/PostgreSQL/9.3/include/postgresql/server/executor/spi.h:113:24: note: expected a€?HeapTuplea€? but argument IS OF TYPE a€?inta€? extern HeapTupleHeader SPI_returntuple(HeapTuple tuple, TupleDesc tupdesc); ^ make: *** [plluaapi.o] Error 1 |
非常感谢
###-更新----
我已修复(仅部分解决)该问题。从enterpriceb下载了postgreSQL 9.2,现在可以正常编译了,在/opt/PostgreSQL/9.2/lib/postgresql中安装了pllua.so。
当我运行时:root @ lua:/opt/PostgreSQL/9.2/bin# ./psql -U postgres -p 5435 -c" CREATE EXTENSION pllua" postgres
它会引发错误:
错误:无法加载库" /opt/PostgreSQL/9.2/lib/postgresql/pllua.so":/opt/PostgreSQL/9.2/lib/postgresql/pllua.so:未定义符号:luaopen_math
现在luaopen_math有什么问题?可能需要在编译之前加载一些luaJit库吗?
已解决!
首先建议(感谢Craig Ringer),我从PostgreSQL 9.3迁移到PostgreSQL 9.2
其次,在/opt/pllua-1.0中键入make时,编译阶段可以,但是链接器阶段存在一些问题。
1 | gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -shared -o pllua.so pllua.o plluaapi.o plluaspi.o -L/opt/PostgreSQL/9.2/lib -L/opt/LOCAL/20140108/fc7f8f12-7861-11e3-aaff-000c29d23b02/lib -L/usr/LOCAL/lib -Wl,--as-needed -Wl,-rpath,'/opt/PostgreSQL/9.2/lib',--enable-new-dtags -L/opt/myLua/lib -llua |
链接器无法识别/ opt / myLua / lib中的共享库liblua.so,就像选项-L / opt / myLua / lib -llua不起作用(可能是Makefile问题)<铅>
所以我将liblua.so移到了/ usr / local / lib中,已执行ldconfig,现在可以了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | root@lua:/opt/PostgreSQL/9.2/lib/postgresql# ldd -v pllua.so linux-vdso.so.1 => (0x00007fff3eddb000) liblua.so => /usr/LOCAL/lib/liblua.so (0x00007f2884eb1000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2884aeb000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f28847e4000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f28845e0000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f28843ca000) /lib64/ld-linux-x86-64.so.2 (0x00007f2885337000) Version information: ./pllua.so: libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6 /usr/LOCAL/lib/liblua.so: libdl.so.2 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libdl.so.2 ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2 libgcc_s.so.1 (GCC_3.3) => /lib/x86_64-linux-gnu/libgcc_s.so.1 libgcc_s.so.1 (GCC_3.0) => /lib/x86_64-linux-gnu/libgcc_s.so.1 libm.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libm.so.6 libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libc.so.6: ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2 ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2 /lib/x86_64-linux-gnu/libm.so.6: libc.so.6 (GLIBC_PRIVATE) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libdl.so.2: ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2 libc.so.6 (GLIBC_PRIVATE) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libgcc_s.so.1: libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6 |
现在您如何看到pllua与严格的liblua.so相关联:
liblua.so => /usr/local/lib/liblua.so(0x00007f2884eb1000)
此后,我使用PgAdminIII加载了模块并测试了http://pllua.projects.pgfoundry.org/
中的示例
此错误:
rowstamp.h:26:2: warning: implicit declaration of function a€?HeapTupleHeaderGetXmina€? [-Wimplicit-function-declaration]
强烈建议您使用的是不同于您尝试编译的PL / Lua源的PostgreSQL版本。也许扩展名未保留,是针对旧PostgreSQL版本的?还是您正在尝试针对9.3编译PostgreSQL 9.4的版本?
更新:
根据
您应该能够下载9.3的PL / Lua,并进行编译而不会出现问题。