问题描述
分拆
这是来自
的衍生产品Can't “install” plpython3u - postgresql 及其所有评论
来自
PosgreSQL 11 lost connection when i'm trying to create function with plpython3u [WIN10,pgAdmin4 3.5]。
目前为止的错误步骤和解决方法
我正在关注Machine Learning in PostgreSQL Part 1: Kmeans clustering
我采取了这些完全分散在 Stack Overflow 上的步骤:
步骤 0
如果你在没有安装它的情况下运行使用语言 plpython3u 的 sql,你会得到
错误:语言“plpython3u”不存在 提示:使用 CREATE EXTENSION 将语言加载到数据库中。
SQL 状态:42704
相关:
步骤 1
错误
错误:无法加载库“C:/Program Files (x86)/PostgreSQL/13/lib/plpython3u.dll": 指定的模块可以 找不到。
SQL 状态:58P01
查找 C:\Program Files\PostgreSQL\13\doc\installation-notes.html
以找到为已安装的 PostgreSQL 版本安装所需的 Python 版本。
PostgreSQL 13
安装注意事项
欢迎使用 PostgreSQL 13 安装向导。
过程语言
过程语言 pl/Perl、pl/Python 和 pl/Tcl 包含在 PostgreSQL 的这个发行版。服务器是使用 这些语言解释器的 LanguagePack 社区分发。 要在 PostgreSQL 中使用这些语言中的任何一种,请下载并 安装适当的解释器并确保它们包含在 将在其下启动数据库服务器的 PATH 变量。这 使用的版本如下所示 - 更新的次要(错误修复)版本也可能 工作,但尚未经过测试:
Perl 5.26
Python 3.7
Tcl 8.6
因此,需要 Python 3.7。
学分去:
- could not load library plpython3.dll --> comment: Where to find this information ? Like for plpython3u which python version is required ?,20 年 7 月 17 日回答
- Error during: CREATE EXTENSION plpython3u; on PostgreSQL 9.6.0,20 年 10 月 2 日编辑
相关:
步骤 2
使用 Python Releases for Windows 的 webinstaller 安装 Python 版本
最新的子版本 3.7.10 在稳定版本列表中没有任何文件,我懒得在 Windows 上从源代码安装 Python。 v3.7.10 的源代码可在此处获得Looking for a specific release?,任何人都可以尝试):
Python 3.7.10 - 2021 年 2 月 15 日
请注意,Python 3.7.10 不能在 Windows XP 或更早版本上使用。
No files for this release.
从How to build Python 3.4.6 from source?复制的解释
Python 3.7 分支处于仅安全修复模式。这意味着 此分支仅接受安全修复,不再接受 非关键错误修复。此分支上的新版本仅提供源代码, 不会提供二进制文件。
See the official announcement。
如果你真的需要一个用于 windows 的 python 3.7.10 二进制文件,你将不得不 自己编译。
Cannot install plpython for postgres 12 建议从源代码安装特定版本:
你想使用特定的python版本>使用源代码并编译
再次,因为我很懒,所以我取了最新的3.7稳定版本,它是3.7.9的子版本,这应该是没有问题的,因为您似乎可以自由选择子版本版本:
试试 python-3.4.0.amd64 for windows 64bit 或其他版本 从这个 Python 3.4.0 下载链接
来自:could not load library plpython3.dll
正如我所说,当 v3.7.9 可用时,我懒得在 Windows 上编译 v3.7.10 的二进制文件,因此:
Python 3.7.9 - 2020 年 8 月 17 日
请注意,Python 3.7.9 不能在 Windows XP 或更早版本上使用。
Download Windows help file
Download Windows x86-64 embeddable zip file
Download Windows x86-64 executable installer
Download Windows x86-64 web-based installer
Download Windows x86 embeddable zip file
Download Windows x86 executable installer
Download Windows x86 web-based installer
我安装了“下载 Windows x86-64 基于 web 的安装程序”(旁注:你不能更改安装路径,他们似乎强迫你使用它;为了快速访问它,在 Windows 资源管理器中,输入路径%appdata% --> 转到父文件夹“appdata” --> 然后到“local” --> “programs” --> “python” 快速到达那里)并选中添加 PATH 变量的框。
您的用户环境变量“PATH”中将有一个新条目,您可以检查这一点,但您不需要:
C:\Users\MY_USER\AppData\Local\Programs\Python\Python37\Scripts\
和
C:\Users\MY_USER\AppData\Local\Programs\Python\Python37\
学分去:
- could not load library plpython3.dll,2018 年 1 月 31 日回答
步骤 3
执行时
CREATE EXTENSION plpython3u;
在PostgreSQL pgAdmin4的查询工具中,报错:
无法加载库“C:/Program Files/PostgreSQL/13/lib/plpython3u.dll": 指定的模块无法 被发现
转到您的 Python 3.7 安装文件夹,就我而言
C:\Users\MY_USER\AppData\Local\Programs\Python\Python37
并将“python37.dll”从那里复制到
C:\Windows\System32
确认您拥有管理员权限。
现在再次执行:
CREATE EXTENSION plpython3u;
学分去:
- Error during: CREATE EXTENSION plpython3u; on PostgreSQL 9.6.0,2017 年 9 月 18 日回答
- Is there any recipe to successfully install PLPython in Postgresql 9.3 64bit or 32bit on Windows 64 bits?,2014 年 2 月 8 日回答
- Cannot install plpython for postgres 12,20 年 10 月 2 日回答
相关问题:
- PostgreSQL unable to create plpythonu extension
- How to install PL/Python on PostgreSQL 9.3 x64 Windows 7?
- i'm facing issues to create a postgresql plpython3u extension
步骤 4(可选)
SELECT * FROM pg_extension
输出:
old | extname | extowner | extrelocatable | extversion | extversion | extconfig | extcondition
"13428"| "plpgsql" | "10" | "11" | false | "1.0" | [null] | [null]
"16776"| "plpython3u" | "10" | "11" | false | "1.0" | [null] | [null]
学分去:
现在,plpython3u 扩展的可用扩展(即可以安装的所有可能的扩展)也显示 installed_version
= 1.0
:
SELECT * FROM pg_available_extensions WHERE name LIKE '%python%' ORDER BY name;
输出:
学分去:
步骤 5
在执行上面提到的指南的这个PostgreSQL查询时,使用语言plpython3u(所需的包“pandas”和“sklearn”安装在Python3.7的基础环境中,即没有使用虚拟环境避免未解决的 Can python venv be used with plpython3u for postgresql?,这绝对不是我对 PostgreSQL 这样的标准 setter 的期望):
CREATE OR replace FUNCTION kmeans(input_table text,columns text[],clus_num int) RETURNS bytea AS
$$
from pandas import DataFrame
from sklearn.cluster import KMeans
from cPickle import dumps
all_columns = ",".join(columns)
if all_columns == "":
all_columns = "*"
rv = plpy.execute('SELECT %s FROM %s;' % (all_columns,plpy.quote_ident(input_table)))
frame = []
for i in rv:
frame.append(i)
df = DataFrame(frame).convert_objects(convert_numeric =True)
kmeans = KMeans(n_clusters=clus_num,random_state=0).fit(df._get_numeric_data())
return dumps(kmeans)
$$ LANGUAGE plpython3u;
(或者您可能只想检查这样的一般测试查询:
CREATE OR REPLACE FUNCTION return_version()
RETURNS VARCHAR
AS $$
import sys
return sys.version
$$ LANGUAGE plpython3u;
所以你不需要为测试获取任何数据集)
我收到错误:
ERROR: server closed the connection unexpectedly
This probably means the server terminated abnormally before or while processing the request.
当我在此之后运行另一个查询时,它会运行,但在单击“继续”之前,我得到:
The application has lost the database connection.
- If the connection was idle,it may have been forcibly disconnected.
- The application server or database server may have been restarted.
- The user session may have timed out.
Do you want to continue and establish a new session?
这可以通过PosgreSQL 11 lost connection when i'm trying to create function with plpython3u [WIN10,pgAdmin4 3.5]解决。这样的答案表明 v3.7.9 或 v3.7.10 或其他的子版本确实很重要!我是否需要从源代码安装 3.7.10 版本才能获得最新版本?
我不想花费精力从源代码安装 Python 3.7.10 只是为了检查一下。谁说那个时候从v3.6.5改到v3.6.7就真的解决了,还不是因为新安装的事情发生的?
我也可以尝试 v3.7.0。
Python 3.7.0 - 2018 年 6 月 27 日
请注意,Python 3.7.0 不能在 Windows XP 或更早版本上使用。
Download Windows help file
Download Windows x86-64 embeddable zip file
Download Windows x86-64 executable installer
Download Windows x86-64 web-based installer
Download Windows x86 embeddable zip file
Download Windows x86 executable installer
Download Windows x86 web-based installer
但由于 v3.6.7 版本似乎曾经有效,我认为没有理由投资于此。
我在 Can't “install” plpython3u - postgresql 中发现了一个我不清楚的评论,因为我没有找到这个“pgpltemplate”,但其中可能有一些含义:
我还执行了 select * from pgpltemplate
,plpython3u 项在“tmplname”列中显示 False
,在“tmpdbacreate”列中显示 False
。
学分去:
- PosgreSQL 11 lost connection when i'm trying to create function with plpython3u [WIN10,pgAdmin4 3.5],18 年 11 月 25 日回答
- Can't “install” plpython3u - postgresql --> comments,20 年 6 月 9 日评论
相关:
问题
Python 3.7 的哪个子版本(v3.7.10、v3.7.0 或其他;也许我的 v3.7.9 也已经正确,因为可以用它创建 plpython 扩展)肯定与 PostgreSQL13 一起工作,以及如何如果不只是通过测试,这必须被发现吗?如果选择正确的子版本不是这里的问题(更有可能),我还能如何修复步骤 5 错误
ERROR: server closed the connection unexpectedly
This probably means the server terminated abnormally before or while processing the request.
(这是 psql: server closed the connection unexepectedly 的一个问题,但不关注这个 Python 扩展问题)
和
The application has lost the database connection.
(这是 PosgreSQL 11 lost connection when i'm trying to create function with plpython3u [WIN10,pgAdmin4 3.5] 上的一个问题,但意味着从源安装 v3.7.10 仅具有最新的子版本,我尝试在这样做之前找出正确的子版本)
附注:
Linux 上的 Docker 和 Linux 上向 postgreSQL 的转变可能是 Windows 社区支持不佳的原因。您应该尝试在 Linux(独立或在 Docker 容器中)上安装它。 Docker 存在的问题是您需要额外的技巧来永久保存您的数据库,以便即使您删除容器也能保存它。在这个问题得到回答之前,我仍然会切换到 Docker。
码头工人:
-
您可能首先从 PostgreSQL on Docker: How to install and run python dependencies under
plpython3u
? 之类的线程中瞥见,或者将 official postgres image using docker-compose 指南作为 postgres 基础并通过 plpython3 对其进行扩展。 -
一个主要技巧是添加符号链接而不是硬编码的安装路径,请参阅Add plpython3 Extension to Postgres/timescaledb Alpine Docker Image。这对我有用。 使用这个 alpine TimescaleDB Dockerfile,我可以使用 plpython3u!也许在 Windows 上需要相同的符号链接,这可以解决这里的问题,但现在,我不花时间检查这个。
独立:
- 当保存数据变得更加重要时,您也可以尝试在独立 Linux 上进行安装。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)