2016-03-19 5 views
0

Мне нужно скопировать данные из файла в базу данных PostgreSQL. Для этой цели я анализирую этот файл с помощью bash в цикле и создаю соответствующие вставки. Беда в том, что для выполнения этого цикла требуется много времени.PostgreSQL: Выполнять запросы в циклах - проблемы с производительностью

1) Что я могу сделать, чтобы ускорить этот цикл? Должен ли я открыть какое-то соединение перед циклом и закрыть его после?

2) Должен ли я использовать временный текстовый файл внутри цикла, чтобы записывать там уникальные значения и искать в нем с помощью текстовой утилиты вместо того, чтобы записывать их в базу данных и выполнять поиск там?

ответ

1

Выполняет ли какой-либо язык программирования, который вы используете, после каждой вставки? Если это так, самое легкое, что вы можете сделать, это зафиксировать после вставки всех строк, а не после каждой строки.

Возможно, вы также сможете вставлять вставки, но с помощью команды PostgreSQL copy меньше работы, а также очень быстро.

+0

Я использую bash. Это имеет значение? – Giperboloid

+1

bash не разговаривает с Postgres, по крайней мере, насколько я знаю. Вы вызываете psql из своего сценария bash? Является ли цикл в вашем сценарии bash? Если это так, то вы также добавляете накладные расходы для подключения и отключения к базе данных для каждой строки в файле. Команда 'copy', вероятно, способ пойти, будет стоить усилий, даже если вам нужно обработать файл, чтобы получить его в приемлемом формате. – Bill

0

Если вы настаиваете на использовании BASH, вы можете разделить файлы на определенные номера строк, а затем выполнить команды paralel с использованием & в конце каждой строки.

Я настоятельно рекомендую вам попробовать другой подход или язык программирования, поскольку, как сказал Билл, bash не разговаривает с postgres, вы также можете использовать функциональность pg_dump, если источником вашего файла является другая база данных postgres.

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