使用 psycopg3 跨服务器复制 table

copying a table across servers with psycopg3

我正在使用 psycopg3 文档中的示例将 table 从一个数据库复制到另一个数据库:link

dsn_src = 'postgresql:///dev_db'
dsn_tgt = 'postgresql:///prod_test'

with psycopg.connect(dsn_src) as conn1, psycopg.connect(dsn_tgt) as conn2:
    with conn1.cursor().copy("COPY sample TO STDOUT (FORMAT BINARY)") as copy1:
        with conn2.cursor().copy("COPY sample FROM STDIN (FORMAT BINARY)") as copy2:
            for data in copy1:
                copy2.write(data)

运行 这会导致以下错误

QueryCanceled: COPY from stdin failed: error from Python: TypeError - can't write memoryview
CONTEXT:  COPY sample, line 1

源架构和目标架构相同,正如文档所建议的那样,如果删除格式规范 (FORMAT BINARY),此错误仍然存​​在。

有没有办法解决这个 memoryview 错误?

猜测您使用的是 psycopg3 <= 3.0.11。这已在每个 Release Notes 的 3.0.12 中修复。我 运行 3.0.11 中的代码,但如您所见,它失败了。我升级到 3.0.13 并且有效。