AFAIK n'est pas de traitement par lots côté serveur dans le fe/be protocole
, donc PgJDBC ne peut pas l'utiliser. . Mettre à jour :Eh bien, je me suis trompé. PgJDBC (précis à partir de 9.3) fait envoyer des lots de requêtes au serveur s'il n'a pas besoin de récupérer les clés générées . Il met simplement en file d'attente un tas de requêtes dans le tampon d'envoi sans se synchroniser avec le serveur après chaque requête individuelle.
Voir :
- Problème 15 :Activer le traitement par lots lors du renvoi des clés générées
- Problème 195 :PgJDBC ne canalise pas les lots qui renvoient les clés générées
Même lorsque les clés générées sont demandées, la requête étendue protocole est utilisé pour s'assurer que le texte de la requête n'a pas besoin d'être envoyé à chaque fois, juste les paramètres.
Franchement, le traitement par lots JDBC n'est en aucun cas une excellente solution. Il est facile à utiliser pour le développeur de l'application, mais assez sous-optimal pour les performances car le serveur doit toujours exécuter chaque instruction individuellement - mais pas parse et planifier individuellement tant que vous utilisez des instructions préparées.
Si la validation automatique est activée, les performances seront absolument pathétiques car chaque instruction déclenche une validation. Même avec la validation automatique désactivée, l'exécution de nombreuses petites instructions ne sera pas particulièrement rapide, même si vous pouviez éliminer les délais aller-retour.
Une meilleure solution pour beaucoup de simples UPDATE
s peut être :
COPY
nouvelles données dans unTEMPORARY
ouUNLOGGED
table; et- Utilisez
UPDATE ... FROM
àUPDATE
avec unJOIN
contre la table copiée
Pour COPIER, voir la documentation PgJDBC
et la COPY
documentation dans la documentation du serveur
.
Vous constaterez souvent qu'il est possible de modifier les choses afin que votre application n'ait pas à envoyer toutes ces UPDATE
individuelles s du tout.