我正在使用 psycopg3 文档中的示例将表从一个数据库复制到另一个数据库: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。此问题已在 3.0.12 中修复(每 Release Notes) 。我在 3.0.11 中运行了代码,但如您所示,它失败了。我升级到 3.0.13 并且成功了。
关于python - 使用 psycopg3 在服务器之间复制表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72233481/