Самый быстрый способ вставить данные - это команда COPY
.
Но для этого требуется плоский файл в качестве входных данных. Я думаю, что создание плоского файла не вариант.
Не фиксируйте слишком часто, особенно , а не запускайте это с включенной автоматической фиксацией.
«Десятки тысяч» звучат так, будто один конец в конце будет правильным.
Если вы можете посоветовать вашему ORM использовать многорядную вставку Postgres, которая также ускорит процесс
Это пример многострочной вставки:
insert into my_table (col1, col2)
values
(row_1_col_value1, row_1_col_value_2),
(row_2_col_value1, row_2_col_value_2),
(row_3_col_value1, row_3_col_value_2)
Если вы не можете сгенерировать приведенный выше синтаксис и используете Java, убедитесь, что вы используете пакетные операторы вместо вставок одного оператора (возможно, другие уровни БД допускают нечто подобное)
Редактировать:
Пост
jmz вдохновил меня на добавление:
Вы также можете увидеть улучшение при увеличении wal_buffers
до некоторого большего значения (например, 8 МБ) и checkpoint_segments
(например, 16)