Is there a reason you don't wish to batch inserts into transaction(s)? Otherwise, you're asking the database to commit (fsync to disk) between each insert statement.
Other ideas:
- Have multiple processes inserting in parallel (this interacts with the commit_delay and commit_siblings settings in postgresql.conf)
- Use unlogged tables (but table is truncated on db startup)
- Put fsync=off and synchronous_commit=off in postgresql.conf (but db may be corrupted in a crash)
- switching to BRIN indexes might be an option, but depends on data
Other ideas:
- Have multiple processes inserting in parallel (this interacts with the commit_delay and commit_siblings settings in postgresql.conf)
- Use unlogged tables (but table is truncated on db startup)
- Put fsync=off and synchronous_commit=off in postgresql.conf (but db may be corrupted in a crash)
- switching to BRIN indexes might be an option, but depends on data