使OpenGauss支持Python3存储过程

news2024/9/23 11:29:22

目录

一、概述

二、编译opengauss支持Python3存储过程

三、还有问题


一、概述

OpenGauss是可以支持以Python2、3编写存储过程的,但是这个功能默认不开启,想要这个功能要自己编译源码,目前这部分源码感觉不够成熟,还有一些问题,但也勉强能用。

二、编译opengauss支持Python3存储过程

configure时加入 --with-python ,我的编译选项如下:

./configure --gcc-version=7.3.0 CC=g++ CFLAGS='-O0' --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-debug --enable-cassert --enable-thread-safety --with-readline --without-zlib --enable-llvm --enable-mot --with-python

我的编译环境,使用的是我自己编译的Python3,这样就有了相关的头文件和so文件:

 我使用的opengauss代码版本是 b82d56991745a , 即opengauss-5.0.0,编译时遇到了一些编译错,似乎对Python存储过程的支持还有问题,但是做了一些修改后,可以成功编译,这些修改如下:

首先是configure里获取python命令的地方,由于我的Python3是自己编的,并且已经把Python3的bin和lib目录加到PATH和LD_LIBRARY_PATH,这里替换为PYTHON=python3.8是为了使用我的头文件和动态库来链接。

 这里估计是编码错误,不解释。

 这里如果不注释的话,create extension plpython3u 时会报 "new language is not yet supported.",这个问题社区里反映过了,有人还提交了修改,但是这个版本还是有问题,不知道怎么搞的。

然后编译、安装、初始化,启动,我就不说了。

然后create extension,创建python存储过程:

create extension plpython3u;

create or replace function pymax(a int, b int)
returns int
language plpython3u
as $$
import numpy
if a > b:
  return a
else:
  return b
$$;

select pymax(10, 3);

三、还有问题

上面的python3存储过程,python3代码是在gaussdb这个进程中的一个线程中运行,这样没啥问题。但是opengauss还提供一个fenced模式,就是再开启一个进程专门用来执行用户定义的存储过程,再把结果传递给gaussdb进程,官方的解释是,这个可以用于调试,在存储过程段错误时,不会导致gaussdb段错误。(需要配置参数unix_socket_directory 参看 Plpython Fenced模式 (opengauss.org))

问题是,我尝试过fenced模式创建和执行python3存储过程,是有问题的,简单的说就是执行以fenced关键字创建的python3存储过程时,报错:

ERROR:  The connection between 'pg_154' and 'UDF Master/Worker' maybe closed. 'pg_154' recv 0 bytes. Error: Success
CONTEXT:  referenced column: pymax

并且gaussdb进程段错误。 

具体参看:

修复执行python脚本函数报错的问题 · Pull Request !3336 · openGauss/openGauss-server - Gitee.com

目前5.0.0的版本仍然有这个问题。

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

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

相关文章

Linux必会100个命令(六十)curl

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具。 curl选项比较多,使用man curl或者curl -h获取帮助信息。 -a/--append …

ClickHouse学习笔记(五):ClickHouse 副本与分片

文章目录 1、概述2、数据副本2.1、副本的特点2.2、副本的定义形式 3、ReplicatedMergeTree 原理解析3.1、数据结构3.1.1 ZooKeeper 内的节点结构3.1.2 Entry 日志对象的数据结构 3.2、副本协同的核心流程3.2.1、INSERT 的核心执行流程3.2.2、MERGE 的核心执行流程3.2.3、MUTATI…

【LeetCode股票买卖系列:714. 买卖股票的最佳时机含手续费 | 暴力递归=>记忆化搜索=>动态规划】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【Vue 基础】尚品汇项目-07-动态展示三级联动数据

由于TypeNav是全局组件,因此将“src/pages/Home”中的“TypeNav”文件夹移动到“src/components”文件夹中 在main.js中修改TypeNav的路径 删除测试请求部分代码 当组件挂载完毕,可以向服务器发请求,然后获取数据,显示数据了。在“…

maven从入门到精通 第二章 Maven中运行Java与Web项目

这里写自定义目录标题 一 maven中运行Java项目1.新建项目2. 运行项目2.1查看当前目录2.2 编译项目2.3测试当前项目2.4 生成jar包2.5 迁移数据位置 二 MAVEN中执行Web项目1.配置项目1.1 配置 web.html1.2 配置index.jsp1.3 注册servlet1.4 直接编译运行,发现配置失败…

机器人工程学习和研究的结构性失衡

结论:无解,谁是那屈指可数的幸运者/(ㄒoㄒ)/~~ 供给:培养的机器人工程专业人才 需求:市场企业主体招聘的相关人才 不匹配,错配,导致供给无效。 机器人工程学习和研究的结构性失衡可能是由多种原因导致的…

Java学习-MySQL-备份

Java学习-MySQL-备份 为什么要备份: 1.保证重要的数据不丢失 2.数据转移 MySQL数据库备份的方式: 1.直接拷贝物理文件 2.在Sqlyog 这种可视化工具中导出 3.使用命令行导出,mysqldump,命令行使用 Sqlyog导出表 1.右键表 → 备…

智慧畜牧三维可视化,图扑数字孪生赋能现代农业

前言 "畜牧业是我国重要的农业产业之一,对于国民经济的发展和人民群众的生活具有重要的意义。智慧畜牧作为现代畜牧业的发展方向之一,将信息技术和现代管理相结合,提高养殖效率和品质,为行业的可持续发展注入新的动力。智慧…

PySpark基础入门(5):Spark 内核调度

目录 Spark 内核调度 DAG 内存迭代计算 Spark并行度 Spark任务调度流程 Spark 内核调度 Spark任务调度:如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG,基于DAG划分Stage,将每个Stage中的任务发到指定节…

盘点那些免费开源、无比精致的图标库,无论是设计还是开发,都很好用

之前分享过很多好看精致的图标库,这对日常设计和开发工作,都很方便,欢迎大家尝试。 css.gg 详细介绍:https://www.thosefree.com/css-gg 一套漂亮的纯 CSS 实现的免费开源图标库,700多个时尚漂亮的 css 图标库&…

本地开发项目删除原有git信息,上传到自己的git仓库

1. 删除原有git信息 进入到项目的目录,右键,选择 git Bash Here 输入 rm -rf .git 查看当前的远程信息:git remote -v 如果有远程信息 使用 git remote rm origin 删除 2.添加自己的远程信息 使用 git remote add origin https://xxxx.git…

分布式事务 --- Seata事务模式、高可用

一、事务模式 1.1、XA模式 XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。…

三种常用的以太网端口链路类型:Access、Hybrid和Trunk

以太网是计算机网络中最常用的协议之一,它允许计算机在同一局域网上通信。在以太网中,交换机(Switch)是一个重要的组件,它们有许多不同的端口,用于连接不同的设备。为了管理和维护这些端口,有三…

Java 数组在内存中的结构是怎样的?数组访问、遍历、复制、扩容、缩容如何编写代码?

Java是一门面向对象的编程语言,数组是其中的重要数据结构之一。在Java中,数组是一种固定长度、有序的数据结构,可以存储一组相同数据类型的元素。在本文中,我们将详细介绍Java数组在内存中的结构。 Java数组的定义 在Java中&…

美国访问学者博士后签证过期后应如何更新?

“美国访问学者类J签证过期后应如何更新?”有读者希望知识人网分享相关经验。今天我们来简单介绍下美国签证免面谈代传递服务,以及其申请条件和相关流程,希望能对大家有所帮助。 首先我们需要明确两个概念: DS2019表的有效期&…

第一章(四):Django框架的模板(DTL):变量、标签、模板过滤器、模板继承、配置模板文件(staticfiles)

系列文章目录 备注:这里是Django系列文章的所有文章的目录 第一章(一) : Django框架如何创建项目、创建应用、创建templates;如何启动django项目; 第一章(二):Django框架的模式、路由、视图; 第一章(三):D…

copilot平替tabnine解析

1.copilot 借着最近chatgpt大火的东风,copilot又重新火了一把。 什么是copilot?直接上wiki百科上的解释 GitHub Copilot是GitHub和OpenAI合作开发的一个人工智能工具,用户在使用Visual Studio Code、Microsoft Visual Studio、Vim、Cursor或…

Flask使用Flask-SQLAlchemy对数据库操作详解二(配置、表与表之间一对一、多对一、多对多关系及增删改查参数和代码详细总结)

前面接:Flask使用Flask-SQLAlchemy对数据库操作详解二(配置、表与表之间一对一、多对一、多对多关系及增删改查参数和代码详细总结) 文章目录 4.增删改查操作4.1添加1. 使用add()方法添加新数据2. 使用create()方法创建新数据 4.2 查询数据1.…

ADAS/AD笔记之特斯拉Autopilot-HW3.0系统

摘要: 目前国内一般直接将高速NOA成为“L2”;因此,复杂度更高的城区NOA,就自然的映射到了“L2”。 一、概述: 特斯拉Autopilot系统首创了NOA这种淡化脱手/脱眼/脱脑(驾驶自动化程度)逻辑的功能…

电脑系统怎么选?Win?MacOS?Linux?

马上要学编程了,我们要学什么操作系统呢?是MacOS,还是Windows,或者是Linux或者其他!那我们今天就来说说MacOS系统和Windows系统的优缺点,也介绍一下其他的系统。让你心里有底! 1、Windows 首先当…