纯 python 基于 postgresql/redshift 的驱动程序上是否有服务器端游标?

Is there a server-side cursor on pure python based postgresql/redshift driver?

我正在使用带有 Python 3 的 pg8000 包来查询 table,并注意到随着 table 的记录数量的增加,应用内存消耗也在增加现在已达到超过 16GB 的内存消耗。

在检查 pg8000 包的游标行为时,我发现游标在被任何 .fetchone().fetchmany(n).fetchall() 方法。

在我的具体案例中,我在 AWS Redshift 上提取记录,方法是在 Glue 作业上使用 Python shell,但有 2 个限制:

  1. 不支持 Python 的基于 C 的包(不幸的是,不支持 psycopg,它支持服务器端游标的缓存)
  2. 最大 16GB 内存。

我已经浏览了 pg8000 文档,但找不到任何关于设置服务器端游标的参考资料。无论如何要在 pg8000 上设置服务器端光标?或者是否有任何其他支持服务器端游标的 postgres/redshift 纯 Python 包?

pg8000 文档现在有 an example 个服务器端游标:

>>> import pg8000.native
>>>
>>> con = pg8000.native.Connection(username, password="cpsnow")
>>> con.run("START TRANSACTION")
[]
>>> con.run("DECLARE c SCROLL CURSOR FOR SELECT * FROM generate_series(1, 100)")
[]
>>> con.run("FETCH FORWARD 5 FROM c")
[[1], [2], [3], [4], [5]]
>>> con.run("MOVE FORWARD 50 FROM c")
[]
>>> con.run("FETCH BACKWARD 10 FROM c")
[[54], [53], [52], [51], [50], [49], [48], [47], [46], [45]]
>>> con.run("CLOSE c")
[]
>>> con.run("ROLLBACK")
[]