Лучший способ вставки очень больших данных в таблицы PostgreSQL. ⇐ Python
-
Anonymous
Лучший способ вставки очень больших данных в таблицы PostgreSQL.
Как лучше всего вставить очень большие данные в таблицу PostgreSQL?
ОС: Ubuntu 22.04 LTS
БД: PostgreSQL 14
Платформа: Python 3.11 Django
На данный момент я использую оператор вставки в 100 000 строк за раз. Весь процесс вставки в среднем 1 000 000 строк занимает 2 минуты, что находится в пределах моего приемлемого диапазона. Но я хочу знать, есть ли лучший способ сделать это.
Все работало нормально, но почему-то это занимало больше времени и иногда выдавало ошибки, например
OperationalError: (psycopg2.OperationalError) сервер неожиданно закрыл соединение из соединения импорта django.db курсор = соединение.курсор() размер_пакета = 100000 смещение = 0 пока правда: транзакции_list_query = SELECT * FROM {source_table} LIMIT {batch_size} OFFSET {offset}; курсор.execute(transaction_list_query) список транзакций = dictfetchall (курсор) если не список_транзакций: перерыв data_to_insert = [] для транзакции в списке транзакций: # Некоторые трудоемкие вычисления Insert_query = INSERT INTO {per_transaction_table} ({company_ref_id_id_column}, {rrn_column}, {transaction_type_ref_id_id_column}, {transactionamount_column}) VALUES {",".join(data_to_insert)} ПРИ КОНФЛИКТЕ ({rrn_column}) ОБНОВИТЬ НАБОР {company_ref_id_id_column} = ИСКЛЮЧЕНО .{company_ref_id_id_column}; курсор.execute(insert_query) смещение += размер_пакета
Как лучше всего вставить очень большие данные в таблицу PostgreSQL?
ОС: Ubuntu 22.04 LTS
БД: PostgreSQL 14
Платформа: Python 3.11 Django
На данный момент я использую оператор вставки в 100 000 строк за раз. Весь процесс вставки в среднем 1 000 000 строк занимает 2 минуты, что находится в пределах моего приемлемого диапазона. Но я хочу знать, есть ли лучший способ сделать это.
Все работало нормально, но почему-то это занимало больше времени и иногда выдавало ошибки, например
OperationalError: (psycopg2.OperationalError) сервер неожиданно закрыл соединение из соединения импорта django.db курсор = соединение.курсор() размер_пакета = 100000 смещение = 0 пока правда: транзакции_list_query = SELECT * FROM {source_table} LIMIT {batch_size} OFFSET {offset}; курсор.execute(transaction_list_query) список транзакций = dictfetchall (курсор) если не список_транзакций: перерыв data_to_insert = [] для транзакции в списке транзакций: # Некоторые трудоемкие вычисления Insert_query = INSERT INTO {per_transaction_table} ({company_ref_id_id_column}, {rrn_column}, {transaction_type_ref_id_id_column}, {transactionamount_column}) VALUES {",".join(data_to_insert)} ПРИ КОНФЛИКТЕ ({rrn_column}) ОБНОВИТЬ НАБОР {company_ref_id_id_column} = ИСКЛЮЧЕНО .{company_ref_id_id_column}; курсор.execute(insert_query) смещение += размер_пакета
Мобильная версия