別のデータベースから以前に選択された〜11.000.000行をPostgreSQLテーブルに入力しています。Python と psycopg2 を使用しています。プロセス全体が完了するまでに推定 1.5 時間かかります。ただし、約 30 分後に「接続が予期せず閉じられました」という例外が発生します。ソースコードは次のようになります。
incursor = indb.cursor()
incursor.execute("SELECT ...")
indb.commit() # (1) close transaction
outcursor = outdb.cursor()
rows = 0
for (col1, col2, col3) in incursor: # incursor contains ~11.000.000 rows
outcursor.execute("INSERT ...", (col1, col2, col3)) # This fails after ~30 minutes
row += 1
if row % 100 == 0: # (2) Write data every 100 rows
outcursor.close()
outdb.commit()
outcursor = outdb.cursor()
incursor.close()
outcursor.close()
outdb.commit()
開いているトランザクションに最大 30 分の上限時間があるか、カーソルに保留中の挿入の上限があると仮定して、失敗した最初の試行の後に挿入(1)
しました。(2)
この仮定はどれも正しくなく、エラーは別の場所にあるようです。
両方のデータベースは、ホストからのポート転送を介して接続する VirtualBox マシンに格納されています。ホストマシンでプログラムを実行します。
どちらのデータベースもテスト目的のみであり、管理する他の接続はありません。psycopg2
これを回避するには問題を書き直す必要があるかもしれませんが、他の場所で非常に時間のかかる挿入が必要なので (約数日間実行されます)、または PostgreSQLの隠れた時間制限について非常に心配しています。