Как ускорить copy_expert в postgresql? - PullRequest
0 голосов
/ 15 февраля 2019

Следующая функция импортирует около 60 тыс. Записей за 111 секунд.Я слышал, как другие говорят, что copy_from и copy_expert делают 1 миллион записей менее чем за минуту.Есть ли что-то в использовании copy_expert, который замедляет процесс по сравнению с использованием copy_from?Что я могу сделать, чтобы оптимизировать это?

cursor = connection.cursor()
cursor.copy_expert('''
COPY employee_employee (name, slug, title, base, overtime, other, gross, benefits, ual, total, year, status, jurisdiction_id, notes)
FROM STDIN WITH (FORMAT csv, HEADER true, FORCE_NOT_NULL (status));
''', open(csv_fname),
)

Что касается релевантных переменных, соединение с базой данных происходит от Django (from django.db import connection).База данных на моем локальном Macbook Pro и PostgreSQL 10.

1 Ответ

0 голосов
/ 17 февраля 2019

Я предлагаю использовать большую django-postgres-copy , которую я использовал, чтобы легко импортировать сом CSV с ~ 1 миллионом строк за несколько секунд непосредственно в PostgreSQL.

Это сделаноCalifornia Civic Data Coalition для импорта и экспорта данных с разделителями с поддержкой Django для команды COPY PostgreSQL.

"Этот пакет пытается сделать использование COPY таким же простым, как и любую другую подпрограмму базы данных, поддерживаемую Django.. Он реализован с помощью специального менеджера моделей. "

Вот как он импортирует CSV в таблицу базы данных.

from myapp.models import MyModel

MyModel.objects.from_csv("./data.csv", dict(name='NAME', number='NUMBER'))

А вот как он экспортирует базу данныхтаблицы в CSV.

from myapp.models import MyModel

MyModel.objects.to_csv("./data.csv")

Прочтите django-postgres-copy документацию , чтобы получить больше информации.

...