我使用Pythons os.system
,pg_dump
和psql
在Postgresql数据库之间传输数据。命令执行如下:
os.system('set some variables ; pg_dump ... | psql ...')
... process copied data ...
所以我设置了一些必需的环境变量,然后转储所需的数据并将其传递给psql,后者将其发送到新数据库。这在大多数情况下都可以正常工作。但是,当复制的数据变大时,在实际导入完成之前,脚本似乎继续处理复制的数据。
我知道管道命令是在子shell中执行的。那么,在子shell中的命令完成之前,os.system可能会返回吗?任何提示如何解决或至少如何调试,将非常感激。
答案 0 :(得分:1)
不,shell命令只会在命令完成后返回。
但是,在命令行实用程序完成时,PostgreSQL 服务器可能仍在完成提交。它作为一个单独的进程运行,当Python连接到数据库时,可能是事务对其他连接不可见。
如果不了解有关导入数据的更多信息,很难为您提供有关如何检测导入事务是否已提交的一个通用解决方案。暂停Python进程(使用time.sleep()
)可能是一种解决方法,或者您可以测试数据库中的特定数据,并循环直到该数据出现。