287 votes

Quel est le moyen le plus rapide d'effectuer une insertion en masse dans Postgres ?

Je dois insérer par programme des dizaines de millions d'enregistrements dans une base de données Postgres. Actuellement, j'exécute des milliers d'instructions d'insertion dans une seule requête.

Existe-t-il une meilleure façon de procéder, une déclaration d'insertion en masse que je ne connais pas ?

0voto

Charlie Clark Points 322

Comme d'autres l'ont noté, lors de l'importation de données dans Postgres, les choses seront ralenties par les vérifications que Postgres est conçu pour effectuer pour vous. En outre, il est souvent nécessaire de manipuler les données d'une manière ou d'une autre pour qu'elles soient utilisables. Tout ce qui peut être fait en dehors du processus Postgres signifie que vous pouvez importer en utilisant le protocole COPY.

Pour mon usage, j'importe régulièrement des données à partir du httparchive.org projet utilisant pgloader . Comme les fichiers sources sont créés par MySQL, vous devez être en mesure de gérer certaines bizarreries de MySQL telles que l'utilisation de la fonction \N pour une valeur vide et avec des problèmes d'encodage. Les fichiers sont également si volumineux que, du moins sur ma machine, l'utilisation de FDW entraîne une saturation de la mémoire. pgloader facilite la création d'un pipeline qui vous permet de sélectionner les champs que vous souhaitez, de les convertir en types de données appropriés et d'effectuer tout travail supplémentaire avant de les intégrer à votre base de données principale, de sorte que les mises à jour d'index, etc. soient minimales.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X