环境

系统平台:银河麒麟 (X86_64),银河麒麟 (鲲鹏)
版本:9.0.4,9.0.3

症状

创建plpython3u 插件

test01=# create extension plpython3u;
CREATE EXTENSION

创建函数报错

test01=# CREATE OR REPLACE FUNCTION hello_world()
test01-# RETURNS text AS $$
test01$#     return "Hello, PostgreSQL with Python3!"
test01$# $$ LANGUAGE plpython3u;
服务器意外地关闭了联接
        这种现象通常意味着服务器在处理请求之前
或者正在处理请求的时候意外中止
与服务器的连接已断开,正在试图重置: 失败。
!?> 败。
!?> 

问题原因

查看数据库自带的python3u的版本

#01-p24x9llq#pwd
/hgsoft/10001/hgdbv9/lib/postgresql
#01-p24x9llq#ldd plpython3.so 
        linux-vdso.so.1 (0x00007fff58f4c000)
        libpython3.11.so.1.0 => /hgsoft/10001/hgdbv9/lib/postgresql/./../libpython3.11.so.1.0 (0x000014c360bd3000)
        libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x000014c360b95000)
        libc.so.6 => /usr/lib64/libc.so.6 (0x000014c3609dd000)
        libdl.so.2 => /usr/lib64/libdl.so.2 (0x000014c3609d8000)
        libutil.so.1 => /usr/lib64/libutil.so.1 (0x000014c3609d3000)
        libm.so.6 => /usr/lib64/libm.so.6 (0x000014c360850000)
        /lib64/ld-linux-x86-64.so.2 (0x000014c3615a0000)

查看系统的python版本

#01-p24x9llq# python3 --version
Python 3.7.9

问题原因为系统自带python环境版本3.与插件所需的3.11版本不同。

解决方案

备份数据库自带的动态链接库,然后用系统的替代数据库自带的进行替换。

$cp /hgsoft/10001/hgdbv9/lib/libpython3.11.so.1.0 /hgsoft/10001/hgdbv9/lib/libpython3.11.so.1.0.old
$cp /usr/lib64/libpython3.so /hgsoft/10001/hgdbv9/lib/libpython3.11.so.1.0

验证数据库python3u插件

test01=# CREATE OR REPLACE FUNCTION hello_world()
test01-# RETURNS text AS $$
test01$#     return "Hello, PostgreSQL with Python3!"
test01$# $$ LANGUAGE plpython3u;
CREATE FUNCTION
test01=# SELECT hello_world();
           hello_world           
---------------------------------
 Hello, PostgreSQL with Python3!
(1 行记录)
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐