网站建设介绍怎么写,提供电子商务网站建设外包服务的企业,一个网站有哪几种漏洞,wordpress 文章点赞瀚高数据库 目录 环境 文档用途 详细信息
环境 系统平台#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本#xff1a;10.4 文档用途 本文档主要介绍PostgreSQL如何支持PL/Python过程语言#xff0c;如何创建plpython扩展。
详细信息 一、PostgreSQL支持python语言…瀚高数据库 目录 环境 文档用途 详细信息
环境 系统平台Linux x86-64 Red Hat Enterprise Linux 7 版本10.4 文档用途 本文档主要介绍PostgreSQL如何支持PL/Python过程语言如何创建plpython扩展。
详细信息 一、PostgreSQL支持python语言的前提条件
1、本地必须安装python
python有python2和python3的版本执行下面命令查看python版本 2、本地必须有python的动态库文件例如libpython2.7.so.1.0、libpython3.10.so.1.0
3、编译PG源码时./configure必须配置–with-python
./configure --prefix/home/pg10_python/pgdb --with-python执行该配置命令时会check本地是否已安装python且是否存在必要的python库文件同时还会选择python版本。
python版本的选择是根据/bin或者/usr/bin目录下的python命令指向的版本决定的。
例如
1python和python-config指向的是python2的版本 PG源码中执行./configure时使用的是python2
[pg10_pythonlocalhost postgresql-10.21]$ ./configure --prefix/home/pg10_python/pgdb --with-python......checking for python... /bin/pythonconfigure: using python 2.7.5 (default, Jun 28 2022, 15:30:04)......2python和python-config指向的是python3的版本 PG源码中执行./configure时使用的是python3
[pg10_pythonlocalhost postgresql-10.21]$ ./configure --prefix/home/pg10_python/pgdb --with-python......checking for python... /bin/pythonconfigure: using python 3.10.5 (main, Jul 21 2022, 16:11:52) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]......二、PG源码中包含python模块的源码在/src/pl/plpython目录下该目录下包含plpython2u和plpython3u两个版本plpythonu默认使用python2的版本。 plpython2u对应python2plpython3u对应python3
三、以python3为例编译PG源码实现对python的支持
1、编译PG源码
[pg10_pythonlocalhost ~]$ cd tmp/postgresql-10.21/[pg10_pythonlocalhost postgresql-10.21]$ ./configure --prefix/home/pg10_python/pgdb --with-python[pg10_pythonlocalhost postgresql-10.21]$ make[pg10_pythonlocalhost postgresql-10.21]$ make install2、PG安装完成后查看生成的python3的相关文件 3、初始化data目录然后在数据库中创建python扩展
##连接数据库[pg10_pythonlocalhost bin]$ ./psql -U postgres -d postgres -p 5432##创建plpython扩展postgres# create extension plpython3u;CREATE EXTENSIONpostgres# \dx plpython3uList of installed extensionsName | Version | Schema | Description----------------------------------------------------------------------------plpython3u | 1.0 | pg_catalog | PL/Python3U untrusted procedural language(1 row)##创建plpython3u语言的函数postgres# CREATE OR REPLACE FUNCTION pyclean(arg text)RETURNS textAS $$global argimport reargstr(arg)argarg.strip( ,)#去掉首尾空格if arg or arg None:argNonereturn arg$$ LANGUAGE plpython3u;CREATE FUNCTION##测试python函数postgres# select length(pyclean(abc d e f ));length--------9(1 row)四、正在运行的PG库中如何创建python扩展
一个场景是安装PG库时并没有配置–with-python导致PG库不能编写python函数。
那么在不重新安装且不重启数据库的前提下如何支持python有以下步骤
1、执行当前数据库的bin目录下的pg_config命令用于查看CONFIGURE的配置内容
[pg10_pythonlocalhost bin]$ ./pg_config......CONFIGURE --prefix/home/pg10_python/pgdb_nopython......2、跳转到PG源码目录加上–with-python重新配置一下
注只做配置不执行make和make install
[pg10_pythonlocalhost ~]$ cd tmp/postgresql-10.21/[pg10_pythonlocalhost postgresql-10.21]$ ./configure --prefix/home/pg10_python/pgdb_nopython --with-python3、配置完成后单独编译安装PG源码中的plpython源码
[pg10_pythonlocalhost postgresql-10.21]$ cd src/pl/plpython/[pg10_pythonlocalhost plpython]$ make[pg10_pythonlocalhost plpython]$ make install4、编译安装后在数据库中就可以查到该扩展
postgres# select * from pg_available_extensions where name like %plpython%;name | default_version | installed_version | comment-------------------------------------------------------------------------------------------plpython3u | 1.0 | 1.0 | PL/Python3U untrusted procedural language(1 row)5、创建plpython3u扩展编写函数测试即可。
注必须加上–with-python重新配置一下否则直接编译plpython会失败
五、查看PG的lib目录下编译生成的plpython库文件的依赖
plpython3.so依赖python3版本的libpython3.10.so.1.0库文件