注意,安装python时,需要--enable-shared
如果python,重装报 error while loading shared libraries: libpython2.7
则需要
vi /etc/ld.so.conf 添加/usr/local/Python2.7/lib
/sbin/ldconfig
/sbin/ldconfig -v
readline 和 readline-devel 最好安装好
PostgreSQL add plpython in database which compiled --without-python —— 德哥
群里的一位兄弟问到的一个问题, 当postgresql 软件在编译时未使用with-python或者使用了without-python选项时.
编译的数据库初始化后没有plpython函数语言.
如果后期要加入plpython语言应该怎么加?
我测试了一下, 是可以加入的, 过程如下 :
1. 下载源码包如postgresql-9.2.2.tar.gz
2. 解压
tar -zxvf postgresql-9.2.2.tar.gz
3. 确保Python.h头文件存在
/
opt
/
greenplum
-
db
-
4.2
.
2.4
/
ext
/
python
/
include
/
python2
.
6
/
Python
.
h
/
opt
/
soft_bak
/
Python
-
3.2
.
3
/
Include
/
Python
.
h
/
usr
/
include
/
python2
.
4
/
Python
.
h
/
usr
/
local
/
include
/
python2
.
7
/
Python
.
h
/
usr
/
local
/
include
/
python3
.
2m
/
Python
.
h
/
usr
/
share
/
doc
/
swig
-
1.3
.
29
/
Manual
/
Python
.
html
4. 进入postgresql 源码目录
cd postgresql-9.2.1/src/pl/plpython
5. 编辑Makefile
override
CPPFLAGS
:=
-
I
.
-
I$
(
srcdir
)
$
(
python_includespec
)
$
(
CPPFLAGS
)
改为
override
CPPFLAGS
:=
-
I
.
-
I$
(
srcdir
)
$
(
python_includespec
)
$
(
CPPFLAGS
)
-
I
/
usr
/
include
/
python2
.
4
6. 编译安装
首先要把pg_config加入到路径中
export
PATH
=
/home/
digoal
/
pgsql9
.
2.1
/
bin
gmake all
gmake install
/
bin
/
mkdir
-
p
'/home/digoal/pgsql9.2.1/lib'
/
bin
/
sh
../../../
config
/
install
-
sh
-
c
-
m
755
plpython
.
so
'/home/digoal/pgsql9.2.1/lib/plpython.so'
/
bin
/
mkdir
-
p
'/home/digoal/pgsql9.2.1/share/extension'
/
bin
/
sh
../../../
config
/
install
-
sh
-
c
-
m
644
./
plpythonu
.
control
./
plpythonu
--
1.0
.
sql
./
plpythonu
--
unpackaged
--
1.0
.
sql
'/home/digoal/pgsql9.2.1/share/extension/'
7. 创建plpythonu extension
postgres
=
# create extension plpythonu;
ERROR: could not access file "$libdir/plpython2": No such file or directory
为啥会这样呢?
从第六步看到so文件是plpython.so.
但是控制文件
plpythonu.control中用到的是plpython2.so
root@db-172-16-3-150-> less plpythonu.control
# plpythonu extension
comment = 'PL/PythonU untrusted procedural language'
default_version = '1.0'
module_pathname = '$libdir/plpython2'
relocatable = false
schema = pg_catalog
superuser = true
看起来直接编译plpython还是有点问题.
所以可以考虑第二种办法, 把整个PostgreSQL使用with-python全编译一遍.
然后把plpython2.so和plpython*.sql拷贝到$PGHOME中.
root@db-172-16-3-150-> cd pgsql9.2.1/
root@db-172-16-3-150-> cd share/extension/
root@db-172-16-3-150-> ll|grep python
-rw-r--r-- 1 ocz ocz 351 Jan 7 14:13 plpython2u--1.0.sql
-rw-r--r-- 1 ocz ocz 196 Jan 7 14:13 plpython2u.control
-rw-r--r-- 1 ocz ocz 402 Jan 7 14:13 plpython2u--unpackaged--1.0.sql
-rw-r--r-- 1 ocz ocz 347 Jan 7 14:13 plpythonu--1.0.sql
-rw-r--r-- 1 ocz ocz 194 Jan 7 14:13 plpythonu.control
-rw-r--r-- 1 ocz ocz 393 Jan 7 14:13 plpythonu--unpackaged--1.0.sql
把以上SQL文件拷贝到老的$PGHOME/share/extension目录下. plpython2.so拷贝到$PGHOME/lib下.
就可以创建plpythonu和plpython2u语言了.
postgres=# create extension plpython2u;
CREATE EXTENSION
postgres=# create extension plpythonu;
CREATE EXTENSION
原地址 http://blog.youkuaiyun.com/hewy0526/article/details/8576024