2017-01-31 2 views
0

У меня есть следующий код на Python, который копирует содержимое таблицы postgres DB1 и INSERTS в аналогичную таблицу в postgres DB2.Python Postgres Лучший способ вставить данные из таблицы на одну БД в другую таблицу на другой БД

Я хочу ускорить его, используя 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() 
+0

Check [Копия и копию с] (http://initd.org/psycopg/docs/usage.html# используя-copy-to-and-copy-from) –

ответ

1

Простейшего способа заключается в использовании ИДПА (обертки иностранных данных) для подключения обоих серверов (https://www.postgresql.org/docs/9.5/static/postgres-fdw.html). И работать по обеим таблицам на одном сервере. (https://www.postgresql.org/docs/9.6/static/dblink.html).

По обоим этим образом данные непосредственно переходить от одного сервера на второй (не с помощью вашей программы)

+0

DBLINK на помощь –

+0

FDW - это самый новый способ, но нужно больше действий. Но разрешите делать запросы в чужие таблицы как локальные. Более чем внешние таблицы могут быть не только postgresql, но также оракулом, mysql и даже просто csv-файлом :-) –

Смежные вопросы