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

news2024/11/19 17:33:09

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

环境
系统平台: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/python

configure: 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/python

configure: 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 EXTENSION

postgres=# \dx plpython3u

                         List of installed extensions

    Name    | 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 text

AS $$

global arg

import re

arg=str(arg)

arg=arg.strip(' ,')#去掉首尾空格

if arg == '' or arg == 'None':

    arg=None

return 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.coloradmin.cn/o/1032071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创建双向循环链表(不带头节点+插入删除操作)

#include<iostream> using namespace std; typedef struct list {int data;list* prior;list* next; }list,*linklist; void Createlist(linklist& l,int n)//创建&#xff08;不带头节点&#xff09;双向链表 {l new list;l->prior NULL;l->next NULL;link…

注册苹果开发者账号步骤揭秘,创建证书全攻略

​ 目录 转载&#xff1a;注册苹果开发者账号的方法 转载&#xff1a;注册苹果开发者账号的方法 在2020年以前&#xff0c;注册苹果开发者账号后&#xff0c;就可以生成证书。 但2020年后&#xff0c;因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号&…

Cortex-M4之FPU单元

最近在学习实时操作系统&#xff0c;以下是我对学习实时操作系统过程中做的一些笔记。 一、FPU单元 在 Coretex-M4 处理器中有一个可选的单精度 FPU 单元&#xff0c;一般 STM32F429 就有 FPU 单元&#xff0c; 如果使能了 FPU 单元的话就可以使用它来对单精度浮点数进行计算…

Mac配置iTerm样式终端

一、MacOs系统 MacOs中终端使用iTerm2 1. 配置oh-my-zsh oh my zsh 的地址&#xff1a; https//github.com/ohmyzsh/ohmyzsh 插件存放位置&#xff1a;~/.oh-my-zsh/plugins 下载常用的插件 git clone http://github.com/zsh-users/zsh-syntax-highlighting.git 修改配…

APP广告变现策略:如何实现盈利与用户体验的平衡?

如何把握流量变现和用户体验的平衡呢&#xff1f;这是许多 APP 开发者在商业化进程中都会关心并迫切需要解决的问题。以下是总结的一些方法和策略。 一、深入了解用户需求 在开发产品或进行商业决策时&#xff0c;我们要始终以用户需求为出发点。通过市场调研、用户调研和数据…

iterm2免密码连接远程服务器教程

iterm2免密码连接远程服务器 commandO&#xff1a;打开iterm的Profiles。如下图 打开&#xff1a;Edit Profiles&#xff0c;页面如下图 点击左侧底部➕ Send text at start位置写&#xff1a;/Users/XXX/iterm_login.sh 22 username 服务器ip password demo&#xff1a;/User…

01Redis的安装和开机自启的配置

安装Redis 单机安装Redis 大多数企业都是基于Linux服务器来部署项目&#xff0c;而且Redis官方也没有提供Windows版本的安装包(此处选择的Linux版本的CentOS 7) Windows版直接下载对应版本的.zip压缩包解压即可使用 第一步: Redis是基于C语言编写的&#xff0c;因此首先需要…

9.21数电(加法器状态机独热编码)

加法 半加器 一位&#xff0c;分为两部分&#xff0c;一个是进位&#xff0c;一个是单位上的和 进位采取与门&#xff0c;单位上的和用异或门 全加器 进位数就是三个数进行加和&#xff0c;通过与门&#xff0c;就是两两过与门 描述每位的和项就是&#xff0c;只去描述那个…

【js】navigator.mediaDevices.getDisplayMedia实现屏幕共享:

文章目录 一、效果图:二、实现思路:三、实现代码: 一、效果图: 二、实现思路: 文档&#xff1a; 【MDN】https://developer.mozilla.org/zh-CN/docs/Web/API/Navigator/mediaDevices web技术分享| WebRTC 实现屏幕共享 面试官&#xff1a;纯前端如何实现录屏并保存视频到本地&a…

Unity中Shader通道ColorMask

文章目录 [TOC](文章目录) 前言一、ColorMask是用来干什么的二、怎么做到和 Unity UI 中的 Shader 一样根据UI层级自动适配Shader中模板测试值1、借鉴Unity官方的 UI Shader 前言 Unity中Shader通道ColorMask 一、ColorMask是用来干什么的 ColorMask RGB | A | 0 | R、G、B、…

无法解析插件 org.apache.maven.plugins:maven-clean-plugin:3.2.0 尝试使用 -U

无法解析插件 org.apache.maven.plugins:maven-clean-plugin:3.2.0 尝试使用 -U 报错如下&#xff1a; 解决方案&#xff1a;在文件夹里面找到报错的文件&#xff0c;删除&#xff0c;然后刷新.pom文件&#xff0c;让maven重新下载即可

共享WIFI项目新时代:代理商如何玩转下半场?

在21世纪的信息化时代&#xff0c;科技的发展日新月异&#xff0c;人们的生活方式也随之发生了翻天覆地的变化。其中&#xff0c;共享经济作为一种新型的经济形态&#xff0c;正在全球范围内迅速发展。共享WiFi作为共享经济的一个重要组成部分&#xff0c;也在下半场的竞争中&a…

最佳开源DEM全国、省、市、县DEM数据分享

数据简介 哥白尼数字高程模型(Copernicus DEM, COP-DEM)由欧洲航天局发布&#xff0c;被行业公认为是目前最佳开源DEM&#xff0c;分辨率有30米和90米两种&#xff0c;该数据来源于WorldDEM&#xff0c;WorldDEM产品是基于0.4弧秒(对应分辨率10-12米)的TanDEM-X DEM处理后得到…

亚马逊,沃尔玛,塔吉特测评补单,撸卡撸货采退高成功率的技巧

做撸的只有在安全稳定的环境下才能不被平台检测&#xff0c;造成被砍单或F号&#xff0c;所以在没有专业团队指导下&#xff0c;建议大家不要轻易尝试&#xff0c;毕竟试错和时间成本才是最大的 亚马逊风控点很多&#xff0c;卖家和工作室想要实现伪装度足够高的环境&#xff…

qt creator创建项目和添加图片资源

目录 一、创建项目 二、放上需要的图片 三、再次打开项目 四、运行项目 一、创建项目 二、放上需要的图片 在创建的项目里新建一个文件夹&#xff0c;里面放上需要的图片 右击项目点击add new 去第一步加的图片的文件夹&#xff0c;把所有图片都加载进来 然后去ui文件里就可…

网络电视机顶盒怎么样?百元价位最佳网络机顶盒排名

网络电视机顶盒无疑是家家户户必备的&#xff0c;用网络机顶盒可以看电视&#xff0c;玩游戏&#xff0c;上网课&#xff0c;K歌&#xff0c;购物等&#xff0c;你认为网络电视机顶盒怎么样&#xff1f;值不值得买&#xff1f;本期我盘点了百元价位段最佳网络机顶盒排名&#x…

基于HTML5架构的综合管廊系统网络结构设计

摘 要&#xff1a;从网络拓扑结构、开放式实时以太网协议、控制层系统配置方面介绍了综合管廊的系统网络架构设计&#xff0c;分析了无线网络特性&#xff0c;阐述了基于HTML5架构所能实现的功能的初步构想&#xff0c;以便于综合管廊运维人员巡检&#xff0c;确保管廊本体安全…

Splashtop 的卓越安全性获得 ISO 27001 认证

在快速发展的数字环境中&#xff0c;实施强有力的安全措施尤为重要。Splashtop 始终优先考虑安全性&#xff0c;一如既往地在远程访问行业坚持以身作则。 我们最近宣布 Splashtop 已获得 ISO/IEC 27001 认证&#xff0c;证明了我们对信息安全、数据保护和合规性最高标准的坚定…

BSV 上用于通用计算的隐私非交互式赏金

如何安全地外包任何计算 我们提出了一种新颖的赏金机制&#xff0c;可以在区块链上安全私密地外包任意计算。解决方案和付款的交换是原子的和无需信任的&#xff1a;赏金发布者获得解决方案而赏金收集者获得奖励&#xff0c;或者两者都不发生。赏金发布者部署一个智能合约&…

CTF--攻防世界-杂项入门第一课

这是第一次接触杂项这个方向&#xff0c;所以就是根据writeup解的题&#xff0c;没有什么自己的思路&#xff0c;只是写一篇文章来记录一下解题过程。 下载题目后拿到一张图片&#xff0c;确实挺迷惑的&#xff0c;不知从何下手&#xff0c;根据大家的思路都是看看有没有隐写&a…