plpython 9.2.2

来源:互联网 发布:剑网三dx11优化版 编辑:程序博客网 时间:2024/06/05 07:44

注意,安装python时,需要--enable-shared

安装pg时,需要--with-python


如果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头文件存在
ocz@db-172-16-3-150-> locate 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 -'/home/digoal/pgsql9.2.1/lib'
/bin/sh ../../../config/install-sh --755  plpython.so '/home/digoal/pgsql9.2.1/lib/plpython.so'
/bin/mkdir -'/home/digoal/pgsql9.2.1/share/extension'
/bin/sh ../../../config/install-sh --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
原创粉丝点击