我正在运行postgresql9.6(在Docker中,使用postgres:9.6.13图片)和psycopg2 2.8.2。在
我的PostgreSQL服务器(本地)托管两个数据库。我的目标是在一个数据库中创建物化视图,该视图使用另一个数据库中的数据,使用Postgres的外部数据包装器。我从一个使用psycopg2的Python脚本来完成这些。在
只要创建物化视图的时间不太长(例如,导入的数据量不是太大),这种方法就可以很好地工作。但是,如果该过程花费的时间超过大约250秒,psycopg2将抛出异常
psycopg2.OperationalError: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
在Postgres的日志中找不到错误消息(或任何与此相关的消息)。在
如果我从SQL客户机(Postico)创建物化视图,它将成功完成。在
这段代码大致说明了我在Python脚本中所做的工作:
^{pr2}$
postgresql9.6可能会在https://stackoverflow.com/a/45627782/1587329中提到的新超时之后终止连接。那样的话,你可以
但它是not recommended。在
它可能在Postico中有效,因为该值已在那里设置。在
要记录一个错误,您需要将
log_min_error_statement
设置为ERROR
或更低,以便它显示出来。在将
keepalive
参数添加到psycopg2.connect
调用中似乎解决了问题:我还是不知道为什么这是必要的。我找不到其他人描述过在Docker中使用Postgres时必须使用
keepalives
参数关键字的人,只是为了能够运行耗时超过4-5分钟的查询,但也许很明显没有人注意到这一点?在相关问题 更多 >
编程相关推荐