Я загружаю пакетный CSV-файл в Postgres, используя Python (скажем, таблица A). Я использую pandas для загрузки данных в чанк, что довольно быстро.
for chunk in pd.read_csv(csv_file, sep='|',chunksize=chunk_size,low_memory=False):
Теперь я хочу обновить другую таблицу (скажем, таблицу B), используя A на основе следующих правил
- если в таблице A есть какие-либо новые записи, которых нет в таблице B, вставьте их как новую запись в таблицу B (на основе поля Id)
- , если значения в таблице A для того же идентификатора изменятсякоторый существует в таблице B, затем обновите записи в таблице B, используя TableA (есть серверные таблицы, которые мне нужно обновить на основе таблицы A)
Я могу сделать это, используя ниже, а затем перебратькаждая строка, но в таблице A всегда есть записи около 1 825 172, и она становится чрезвычайно медленной. Любой участник форума может помочь ускорить это или предложить альтернативный подход для достижения того же.
cursor.execute(sql)
records = cursor.fetchall()
for row in records:
id= 0 if row[0] is None else row[0] # Use this to match with Table B and decide insert or update
id2=0 if row[1] is None else row[1]
id2=0 if row[2] is None else row[2]