首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PostgreSQL 11:错误[57P03]:致命:数据库系统处于恢复模式

PostgreSQL 11:错误[57P03]:致命:数据库系统处于恢复模式
EN

Stack Overflow用户
提问于 2020-01-17 02:20:52
回答 2查看 17.7K关注 0票数 0

我正在努力使plpython3u语言在PostgreSQL 11中工作(我正在使用一台Windows10机器)。

我使用以下命令成功地安装了它。

代码语言:javascript
运行
复制
CREATE EXTENSION plpython3u;

我必须下载python36.dll并将其保存在C:\Windows\System32中才能成功地执行此操作,因为之前我收到了以下错误。

无法加载库"C:/Program /PostgreSQL/11/lib/plpython3.dll“:找不到指定的模块。

为了测试安装,我尝试创建以下函数,这是我从PostgreSQL文档获得的。

代码语言:javascript
运行
复制
CREATE FUNCTION pymax (a integer, b integer)
  RETURNS integer
AS $$
  if a > b:
    return a
  return b
$$ LANGUAGE plpython3u;

但是执行它会给出以下错误。

SQL错误57P03:致命:数据库系统处于恢复模式

下面是我从日志中得到的。

代码语言:javascript
运行
复制
Current thread 0x000035b8 (most recent call first):
2020-01-16 20:10:17.136 CST [6980] LOG:  server process (PID 12532) was terminated by exception 0xC0000409
2020-01-16 20:10:17.136 CST [6980] DETAIL:  Failed process was running: CREATE FUNCTION public.pymax (a integer, b integer)

      RETURNS integer

    AS $$

      if a > b:

        return a

      return b

    $$ LANGUAGE plpython3u
2020-01-16 20:10:17.136 CST [6980] HINT:  See C include file "ntstatus.h" for a description of the hexadecimal value.
2020-01-16 20:10:17.136 CST [6980] LOG:  terminating any other active server processes
2020-01-16 20:10:17.229 CST [5636] WARNING:  terminating connection because of crash of another server process
2020-01-16 20:10:17.229 CST [5636] DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
2020-01-16 20:10:17.229 CST [5636] HINT:  In a moment you should be able to reconnect to the database and repeat your command.
2020-01-16 20:10:17.246 CST [6980] LOG:  all server processes terminated; reinitializing
2020-01-16 20:10:17.373 CST [4944] LOG:  database system was interrupted; last known up at 2020-01-16 20:09:02 CST
2020-01-16 20:10:17.392 CST [9880] FATAL:  the database system is in recovery mode
2020-01-16 20:10:17.509 CST [11412] FATAL:  the database system is in recovery mode
2020-01-16 20:10:17.623 CST [12472] FATAL:  the database system is in recovery mode
2020-01-16 20:10:17.730 CST [12480] FATAL:  the database system is in recovery mode
2020-01-16 20:10:17.843 CST [12432] FATAL:  the database system is in recovery mode
2020-01-16 20:10:17.951 CST [12492] FATAL:  the database system is in recovery mode
2020-01-16 20:10:18.060 CST [12744] FATAL:  the database system is in recovery mode
2020-01-16 20:10:18.175 CST [12160] FATAL:  the database system is in recovery mode
2020-01-16 20:10:18.298 CST [13084] FATAL:  the database system is in recovery mode
2020-01-16 20:10:18.828 CST [4944] LOG:  database system was not properly shut down; automatic recovery in progress
2020-01-16 20:10:18.835 CST [4944] LOG:  redo starts at 0/17FF400
2020-01-16 20:10:18.835 CST [4944] LOG:  redo done at 0/17FF438
2020-01-16 20:10:19.044 CST [6980] LOG:  database system is ready to accept connections
Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-17 06:16:38

我必须下载python36.dll并将其保存在C:\Windows\System32

由于缺乏库版本控制,包含可执行文件的目录总是在共享库路径上,以及随后在各种目录中随机保存同一个共享库的副本的草率习惯,Windows用户养成了从internet上的某个地方下载可执行代码并运行它的习惯。

这是一种危险和有害的做法。显然,您得到了Python共享库的错误化身,或者您丢失了其他一些重要文件,因此PostgreSQL在使用它时崩溃了。

从流氓下载中删除任何DLL文件,获取Python 3安装包并以常规方式安装它。

票数 2
EN

Stack Overflow用户

发布于 2020-01-17 15:17:24

正如劳伦兹·阿尔贝在他的回答中所建议的,错误很可能是我下载的DLL文件造成的。

以下是我所遵循的。

  1. 使用DROP EXTENSION plpython3u删除扩展
  2. python36.dll中删除下载的C:\Windows\System32
  3. 在我的机器上卸载所有已安装的Python版本
  4. 下载并安装(面向所有用户)64位版本的Python3.6(因为这正是plpython3.dll所期望的)
  5. 将Python路径添加到环境变量的path变量中(我是在Python安装期间这样做的)
  6. 再次使用CREATE EXTENSION plpython3u安装扩展(它能够成功地创建扩展)

我使用下面的示例函数成功地测试了它。

样本代码:

代码语言:javascript
运行
复制
CREATE FUNCTION pymax (a integer, b integer)
  RETURNS integer
AS $$
  if a > b:
    return a
  return b
$$ LANGUAGE plpython3u;

查询

代码语言:javascript
运行
复制
SELECT pymax(4,2)

输出

代码语言:javascript
运行
复制
4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59780365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档