PostgreSQL 13 + Python 3.7.9 + plpython3u:'psql:服务器意外关闭了连接' + '应用程序丢失了数据库连接' 分拆目前为止的错误步骤和解决方法问题

问题描述

分拆

这是来自

的衍生产品

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

enter image description here

因此,需要 Python 3.7。

学分去:

相关:

步骤 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.

enter image description here

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

enter image description here

我安装了“下载 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\

enter image description here

学分去:

步骤 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;

学分去:

相关问题:

步骤 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]

enter image description here

学分去:

现在,plpython3u 扩展的可用扩展(即可以安装的所有可能的扩展)也显示 installed_version = 1.0

SELECT * FROM pg_available_extensions WHERE name LIKE '%python%' ORDER BY name;

输出:

enter image description here

学分去:

步骤 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.

enter image description here

当我在此之后运行另一个查询时,它会运行,但在单击“继续”之前,我得到:

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?

enter image description here

这可以通过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

enter image description here

但由于 v3.6.7 版本似乎曾经有效,我认为没有理由投资于此。

我在 Can't “install” plpython3u - postgresql 中发现了一个我不清楚的评论,因为我没有找到这个“pgpltemplate”,但其中可能有一些含义:

我还执行了 select * from pgpltemplate,plpython3u 项在“tmplname”列中显示 False,在“tmpdbacreate”列中显示 False

学分去:

相关:

问题

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。

码头工人:

独立:

  • 当保存数据变得更加重要时,您也可以尝试在独立 Linux 上进行安装。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...