Вопрос:
У меня есть следующий код python, который копирует содержимое таблицы в postgres DB1 и INSERTS в аналогичную таблицу в postgres DB2.
Я хочу ускорить его, используя BULK INSERTS. Как достичь этого?
import psycopg2 import sys import os all_data = [] try: connec = psycopg2.connect(«host = server1 dbname = DB1 «) connecc = psycopg2.connect(«host = server2 dbname = DB2 «) connec.autocommit = True connecc.autocommit = True except: print(«I am unable to connect to the database.») cur = connec.cursor() curr = connecc.cursor() cur.execute(«»»SELECT * FROM TABLE1″»») curr.execute(«TRUNCATE table TABLE2») rows = cur.fetchall() for row in rows: all_data = row curr.execute(«INSERT INTO TABLE2 » «VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,» » %s)» ,(all_data[0], all_data[1],all_data[2],all_data[3],all_data[4], all_data[5], all_data[6], all_data[7], all_data[8], all_data[9], all_data[10], all_data[11], all_data[12], all_data[13], all_data[14],all_data[15], all_data[16], all_data[17], all_data[18], all_data[19], all_data[20], all_data[21], all_data[22])) connecc.commit() connec.close() connecc.close() Лучший ответ:
Самый простой способ – использовать FDW (внешние обертки данных) для подключения обоих серверов (https://www.postgresql.org/docs/9.5/static/postgres-fdw.html). И работать по обеим таблицам на одном сервере.
Второй способ – использовать dblink (https://www.postgresql.org/docs/9.6/static/dblink.html).
Таким образом, данные напрямую передаются с одного сервера на второй (нет через вашу программу)