在Centos7中安装PostgreSQL的编程语言 plpython3u

错误:libpython3.3m.so.1.0 not found 或者 libpython3.4m.so.1.0 没有那个文件或目录
以下演示的是同一个问题,只是版本不一样导致的有一些文件命名不一样。
plpython3.so是Python3.3的动态库名称,
plpython3.4m.so是Python3.4的动态库名称。

没有安装相应Python动态库

1

PostgreSQL 的版本对应的 Python 的版本问题。

PostgreSQL版本Python版本
9.x3.3
10.x3.4
11.x3.6

(唯独跳过了Python3.5的对应pg版本) - -!

更新此处:有一个方法来 python 兼容不同版本的 pg
在这里插入图片描述
此路径下的plpython3.so
在这里插入图片描述
将python35版本的plpython35.so文件替换之。(可以上网找)
这样即使是10.x版本的pg也能兼容Python35了。

Python和PostgreSQL的安装这里不提。

2

在安装Python的时候,编译时:./configure xxxxx --enable-shared
意思就是:启用共享动态库版本,生成可以共享的接口,供其他开发者使用。默认是静态库版本:–enabled-static

ldd 是一个命令,可供查看linux的动态库的依赖关系。
ldd命令

3

上图,not found
未建立动态库链接位置的报异常
需要通过添加环境变量:LD_LIBRARY_PATH 指定所需要动态库的位置,如下。
LD_LIBRARY_PATH加入环境变量
先进行Python3.3的启动测试:
python3启动测试
在测试 plpython3.so动态库测试。此时能寻到依赖包的确切位置。
此为python3.3的安装成功截图
ldd xx.so动态库测试
此为python3.4的安装成功截图
在这里插入图片描述

4.最后:(最重要的一步,需要修改启动方式)

确定准备好依赖库之后,则要重新启动postgresql。
先关闭:systemctl stop postgresql-9.6.service

需要用原命令启动。(需要用postgres用户启动,非root用户)

/opt/PostgreSQL/9.6/bin/pg_ctl -D /opt/PostgreSQL/9.6/data -l /opt/PostgreSQL/9.6/data/log1 start

-D是指定数据路径,-l是指定log路径

4.1 启动后 在pg中创建plpython3u。

创建plpython3u成功

5.总结

在这一系列步骤下来,主要的几个问题点是:

5.1. ./configure 的参数。

2019年2月28日14:39:30 补充
–enable-static:生成静态链接库
–enable-shared:生成动态链接库

参考文档连接:https://blog.csdn.net/daixiaoxiong/article/details/6657470

静态库
	在编译过程中,就将静态库中的代码载入程序,由此生成出的可执行程序在运行中不再需要静态库,
但因为库中的程序代码被复制进目标程序中,因此生成的程序体积会比较大。linux中,静态库的命名规则通常为lib*.a

优点

  • 因为将库中代码加载进mysql程序中,因此运行时省去动态链接加载的过程,带来一定的性能提升
  • 程序运行可以不依赖于库文件,即便库文件被删除也可以照样运行

缺点

  • 生成的可执行程序体积较大
  • 使用静态链接库无法在内存中共享,会造成一定的浪费
动态库
	又称为共享库,即编译时只对库进行简单的引用而不载入程序,在程序运行时才将动态库中的代码载入内存使用,
因此使用动态库的程序在运行时需要其相关的动态库都存在。linux中,动态库的命名通常是*.so

优点

  • 生成的可执行程序体积小
  • 动态库在内存只加载一次,同时可为多个进程共享,由此会提高一定的效率

缺点

  • 依赖库文件,不方便移植
5.2. linux 环境下的C++动态库路径配置以及涉及到的命令
5.3 PostgreSQL 启动命令的改变。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐