PostgreSQL如何支持PL/Python过程语言

瀚高数据库
目录
环境
文档用途
详细信息

环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:10.4
文档用途
本文档主要介绍PostgreSQL如何支持PL/Python过程语言,如何创建plpython扩展。

详细信息
一、PostgreSQL支持python语言的前提条件

1、本地必须安装python

python有python2和python3的版本,执行下面命令查看python版本

image.png

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命令指向的版本决定的。

例如:

1)python和python-config指向的是python2的版本

image.png

PG源码中执行./configure时,使用的是python2

[pg10_python@localhost 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)......

2)python和python-config指向的是python3的版本

image.png

PG源码中执行./configure时,使用的是python3

[pg10_python@localhost 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的版本。

image.png

plpython2u对应python2,plpython3u对应python3

三、以python3为例,编译PG源码实现对python的支持

1、编译PG源码

[pg10_python@localhost ~]$ cd tmp/postgresql-10.21/[pg10_python@localhost postgresql-10.21]$ ./configure --prefix=/home/pg10_python/pgdb --with-python[pg10_python@localhost postgresql-10.21]$ make[pg10_python@localhost postgresql-10.21]$ make install

2、PG安装完成后,查看生成的python3的相关文件

image.png

3、初始化data目录,然后在数据库中创建python扩展

##连接数据库[pg10_python@localhost 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 rearg=str(arg)arg=arg.strip(' ,')#去掉首尾空格if arg == '' or arg == 'None':arg=Nonereturn 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_python@localhost bin]$ ./pg_config......CONFIGURE = '--prefix=/home/pg10_python/pgdb_nopython'......

2、跳转到PG源码目录,加上–with-python重新配置一下

注:只做配置,不执行make和make install

[pg10_python@localhost ~]$ cd tmp/postgresql-10.21/[pg10_python@localhost postgresql-10.21]$ ./configure --prefix=/home/pg10_python/pgdb_nopython --with-python

3、配置完成后,单独编译安装PG源码中的plpython源码

[pg10_python@localhost postgresql-10.21]$ cd src/pl/plpython/[pg10_python@localhost plpython]$ make[pg10_python@localhost plpython]$ make install

4、编译安装后,在数据库中就可以查到该扩展

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库文件

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/115169.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TSINGSEE视频AI智能分析技术:水泥厂安全生产智能监管解决方案

一、方案背景 随着人工智能技术的快速发展以及视频监控系统在全国范围内的迅速推进,基于AI视频智能分析技术的智能视频监控与智慧监管系统,也已经成为当前行业的发展趋势。在工业制造与工业生产领域,工厂对设备的巡检管理、维护维修、资产管…

时间任务管理软件OmniFocus 3 mac中文版软件特色

OmniFocus Standard mac是一款高效的任务管理软件,具有任务管理功能、自定义功能、简洁直观的界面以及强大的提醒和通知功能。 OmniFocus Standard mac软件特色 ​任务管理功能:OmniFocus Standard支持多种视图以适应不同的需求和偏好,比如项…

椭圆曲线加密算法

椭圆曲线密码学(Elliptic curve cryptography),简称ECC,是一种建立公开密钥加密的算法,也就是非对称加密。类似的还有RSA,ElGamal算法等。ECC被公认为在给定密钥长度下最安全的加密算法。比特币中的公私钥生…

LiCSBAS计算的SBAS形变结果导出时序曲线图方法

LiCSBAS(Large-scale InSAR Time-Series Analysis using SBAS)是一种用于处理合成孔径雷达干涉测量(InSAR)数据的时间序列分析方法。它旨在监测地球表面的地质变化,如地壳运动、地震、火山活动等。以下是LiCSBAS的主要…

Tiny11:极限精简的Windows 11系统镜像,老旧电脑的福音(移除Windows11安装要求限制,且支持苹果ARM架构CPU,全版本资源下载)

文章目录 优点和适用场景系统下载系统版本说明系统安装Tiny11 设置安装简体中文语言方法Windows 11,作为微软最新一代操作系统,固然有其强大的功能和卓越的性能,但有时,更轻、更小、更快速的需求也在用户的考虑范围之内。这就是Tiny11存在的理由。Tiny11是基于Windows 11的…

热分析技术在工业设备状态监测中的应用

前面我们探讨了工业设备状态监测中的声发射技术应用​​​​​​​,本期我们继续深入工业设备状态监测,探讨热分析技术在该领域的应用。 热分析技术简介 热分析技术是一种基于温度变化的监测方法,它通过测量和分析设备或系统的温度来检测可能…

Multisim14.0仿真(二十)74LS161 4位同步二进制加法计数器

一、仿真原理图: 二、仿真效果图:

【深度学习】Pytorch 系列教程(一):PyTorch数据结构:1、Tensor(张量):维度(Dimensions)、数据类型(Data Types)

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、Tensor(张量) 1. 维度(Dimensions) 0维(标量) 1维(向量) 2维(矩阵) 3维张量 2. 数据…

【力扣】300. 最长递增子序列 <动态规划>

【力扣】300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2…

vSAN数据恢复-vSAN架构下虚拟机磁盘组件出现问题的数据恢复案例

vsan数据恢复环境: 一套VMware vSAN超融合基础架构,全闪存,开启压缩重删。共11台服务器节点。每台服务器节点上配置1块PCIE固态硬盘和8-10块SSD固态硬盘。 每个服务器节点上创建1个磁盘组,每个磁盘组将1个PCIE固态硬盘识别为2个硬…

李佳琦翻车一周后,互联网打工人终于敢夸夸努力生活的自己

9月9日,李佳琦在直播间推销“花西子”79元的眉笔时,有弹幕留言说太贵了。然后李佳琦直接开始和弹幕的对线,他反问:哪里贵了?这么多年都是这个价格,不要睁着眼睛乱说,国货品牌很难的……哪里贵了…

伦敦银一手是多少?

伦敦银是以国际现货白银价格为跟踪对象的电子合约交易,无论投资者通过什么地方的平台进入市场,执行的都是统一国际的标准,一手标准的合约所代表的就是5000盎司的白银,如果以国内投资者比较熟悉的单位计算,那约相当于15…