小编Nic*_*lai的帖子

psycopg2游标在查询时间过长时挂起

我在 Python 中使用 psycopg2 执行长时间查询时遇到问题。当查询时间超过 180 秒时,脚本执行会长时间挂起。

我用Python 3.4.3psycopg2 2.6.1

以下是重现该问题的示例:

import psycopg2

cnn = psycopg2.connect(
    database='**********',
    user='**********',
    password='**********',
    host='**********',
    port=5432,
)
print("Connected")
cursor = cnn.cursor()
seconds = 5
print("Sleep %s seconds"%seconds)
cursor.execute("SELECT pg_sleep(%s);"%seconds)
print("Exit.")
Run Code Online (Sandbox Code Playgroud)

当查询需要 5 秒时,脚本工作正常:

$python3 /tmp/test.py 
Connected
Sleep 5 seconds
Exit.
Run Code Online (Sandbox Code Playgroud)

但是当秒数大约为 180 或更大时,线路cursor.execute会挂起并且永远不会执行以下指令:

import psycopg2

cnn = psycopg2.connect(
    database='**********',
    user='**********',
    password='**********',
    host='**********',
    port=5432,
)
print("Connected")
cursor = cnn.cursor()
seconds = 180
print("Sleep %s seconds"%seconds)
cursor.execute("SELECT pg_sleep(%s);"%seconds)
print("Exit.")
Run Code Online (Sandbox Code Playgroud)

这是一个输出(print("Exit.") …

python psycopg2 python-3.x

8
推荐指数
1
解决办法
3688
查看次数

当 PostgreSQL 中没有会话发出 LISTEN 时,NOTIFY 会发生什么?

PostgreSQL 有一个很好的监听/通知系统。文档说:

有一个队列保存已发送但尚未被所有侦听会话处理的通知。如果此队列已满,则调用 NOTIFY 的事务将在提交时失败。

但是我无法找出没有侦听器的指定频道中的事件发生了什么。通知队列会溢出还是 PG 会从队列中删除这些事件?

postgresql listen notify

2
推荐指数
2
解决办法
3110
查看次数

标签 统计

listen ×1

notify ×1

postgresql ×1

psycopg2 ×1

python ×1

python-3.x ×1